|
#1
|
||||
|
||||
Даты Firebird 1.5
Добрый день появилась необходимость списка сотрудников с возрастом(только число лет ):
Не могу разобраться как сделать запрос: FIOP - Фамилия имя отчество полностью BIRTHDAY - день варенья пытался сделать так : Код:
1. Extract (Year From 'Today' - You_Date) 2. Cast (('Today' - You_Date) /365.25 As Integer) 1. Не помогает ругается на несоответствие типов данных. 2. Округляется если например 08.11.2011 человеку должно исполниться 54 года то значит 25.10.2011 должно быть 53 но нет запрос возвращает 54 года. Подскажите как написать нормальный запрос? |
#2
|
|||
|
|||
Если еще надо, вот что получилось чисто в запросе. Если с делфи, наверняка можно проще
select FIOP, BIRTHDAY FROM new_table where ( EXTRACT(YEAR FROM current_date) - :X - 1 = EXTRACT(YEAR FROM BIRTHDAY) AND ( EXTRACT(MONTH FROM current_date) < EXTRACT(MONTH FROM BIRTHDAY) or ( EXTRACT(MONTH FROM current_date) = EXTRACT(MONTH FROM BIRTHDAY) AND EXTRACT(DAY FROM current_date) < EXTRACT(DAY FROM BIRTHDAY)) )) or ( EXTRACT(YEAR FROM current_date) - :X = EXTRACT(YEAR FROM BIRTHDAY) AND ( EXTRACT(MONTH FROM current_date) > EXTRACT(MONTH FROM BIRTHDAY) or ( EXTRACT(MONTH FROM current_date) = EXTRACT(MONTH FROM BIRTHDAY) AND EXTRACT(DAY FROM current_date) > EXTRACT(DAY FROM BIRTHDAY)) )) Во всяком случае, работает! |
#3
|
|||
|
|||
Или еще, кстати
select FIOP, BIRTHDAY FROM new_table WHERE BIRTHDAY between CAST(CAST((EXTRACT(YEAR FROM current_date) - cast(:X as smallint) - 1) AS char(4)) || '/' || CAST(EXTRACT(MONTH FROM current_date) AS char(2)) || '/' || CAST(EXTRACT(DAY FROM current_date)+1 AS char(2)) AS DATE) AND CAST(CAST((EXTRACT(YEAR FROM current_date) - cast(:X as smallint)) AS char(4)) || '/' || CAST(EXTRACT(MONTH FROM current_date) AS char(2)) || '/' || CAST(EXTRACT(DAY FROM current_date) AS char(2)) AS DATE) |
#4
|
||||
|
||||
Да надо, спасибо что ответили но:
по первому варианту возвращает ошибку : "SQL error code= -804 Data type unknown" по второму выдает пустые значения |
#5
|
|||
|
|||
Я вообще проверяю запрос в IBExpert. Там оба варианта работают. А на какие компоненты Delphi он повешен?
Можно еще в первом случае попробовать тоже на параметр навесить CAST(:X AS SMALLINT) Последний раз редактировалось _taddy, 01.11.2011 в 09:46. |