Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите составить запрос с датами. / 19 сообщений из 19, страница 1 из 1
30.01.2004, 12:21
    #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
30.01.2004, 12:23
    #32393482
1man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите составить запрос с датами.
А если
year from (date2-date1)
...
Рейтинг: 0 / 0
30.01.2004, 12:28
    #32393496
anastassia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите составить запрос с датами.
не помогает
...
Рейтинг: 0 / 0
30.01.2004, 12:33
    #32393513
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите составить запрос с датами.
Версия сервера какая и какой диалект юзаешь?
...
Рейтинг: 0 / 0
30.01.2004, 12:36
    #32393521
anastassia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите составить запрос с датами.
диалект 3, сервер - interbase 6.0
...
Рейтинг: 0 / 0
30.01.2004, 12:45
    #32393542
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите составить запрос с датами.
Боюсь придется реализовывать через UDF - аналог MSSQL'ой DateAdd(datepart, number, date) :((( Т.к. я лично не вижу арифметического решения этой проблеммы...
...
Рейтинг: 0 / 0
30.01.2004, 12:52
    #32393548
KeepeR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите составить запрос с датами.
Гы ... а где же он не выберет тебе эту строку когда ты сравниваешь ГОДА а не ДАТЫ !!! конечно разница в годах у тебя 5 лет а в датах 4 года с лишним ...

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

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

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

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

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


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