powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите составить запрос с датами.
19 сообщений из 19, страница 1 из 1
помогите составить запрос с датами.
    #32393476
anastassia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
В таблице есть две даты date1 и date2(date2 всегда позже date1). Надо выбрать из неё те строки у которых разница между этими датами не меньше 5-ти лет.

Я делаю это так:
select person_id from lc_table
where (extract(year from date2)-extract(year from date1))>=5;

Но это не совсем то что мне нужно. Например 05.05.1995 и 05.01.2000.
5 лет не прошло, но мой запрос выберет эту строку. А мне важно чтобы точно 5 лет.
Как так сделать?
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393482
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если
year from (date2-date1)
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393496
anastassia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не помогает
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393513
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия сервера какая и какой диалект юзаешь?
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393521
anastassia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
диалект 3, сервер - interbase 6.0
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393542
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь придется реализовывать через UDF - аналог MSSQL'ой DateAdd(datepart, number, date) :((( Т.к. я лично не вижу арифметического решения этой проблеммы...
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393548
KeepeR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гы ... а где же он не выберет тебе эту строку когда ты сравниваешь ГОДА а не ДАТЫ !!! конечно разница в годах у тебя 5 лет а в датах 4 года с лишним ...

Сравнивай даты полностью. А из результата извлекай год. Для этого обзаведись переменной......

внимательнее надо быть ....
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393551
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще конечно написать что-то типа такого:
(extract(year from date2)-extract(year from date1))>=5 and
(extract(month from date2)-extract(month from date1))>=0

так, по идее, должно быть с точностью до месяца, но такого плана запросы нагрузят сервер ОЧЕНЬ сильно...
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393565
KeepeR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Kull Damned

Видишь ли, тогда надо сравнивать еще и дни.....
разница в годах будет даже если у тебя дни первый больше второго ...
Теперь представь насколько еще поднимается загрузка сервера.
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393573
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 KeepeR
А то я не знаю... %)
Ты лучше подскажи как будет выглядеть запрос в твоем варианте. :)) Я считаю что без UDF'ки будет облом...
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393602
anastassia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тогда такой вопрос:
я только недавно работаю с ib, как выглядит выражение, которое позволит получить новую дату : newdate=( date2 - 5 лет)
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393639
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anastassiaполучить новую дату : newdate=( date2 - 5 лет)
Код: plaintext
CAST(EXTRACT(DAY FROM Date2)||'.'||EXTRACT(MONTH FROM Date2)||'.'||(EXTRACT( YEAR FROM Date2) -  5 ) AS DATE)
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393644
Void!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а почему никто не предлагает date2-date1>1825
где 1825 = 5*365
?
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393649
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
select
  *
from
  <Имя таблицы> t
where
  t.date2>=(t.date1+( 5 * 365 ))
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393652
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, а чтобы високосные шода обрабатывать, надо ХП писать ;))
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393669
anastassia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, всё получилось!

Мимопроходящий - отдельное огромное спасибо!
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32393732
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Мимопроходящий
Кстати, по performance'у что будет быстрее: такая строка с cast'ами или то же самое внутри UDF, но с числами?
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32394301
IgorL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А between не поможет?
...
Рейтинг: 0 / 0
помогите составить запрос с датами.
    #32396219
Crimson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полезная статья
http://bdn.borland.com/article/0,1410,28886,00.html
...we're walking in the air
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите составить запрос с датами.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]