Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.10.2011, 14:40
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию Даты 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  
Старый 28.10.2011, 10:21
_taddy _taddy вне форума
Прохожий
 
Регистрация: 27.10.2011
Адрес: Минск
Сообщения: 15
Версия Delphi: 2007
Репутация: 2767
По умолчанию

Если еще надо, вот что получилось чисто в запросе. Если с делфи, наверняка можно проще

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  
Старый 28.10.2011, 10:30
_taddy _taddy вне форума
Прохожий
 
Регистрация: 27.10.2011
Адрес: Минск
Сообщения: 15
Версия Delphi: 2007
Репутация: 2767
По умолчанию

Или еще, кстати
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  
Старый 31.10.2011, 14:04
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Да надо, спасибо что ответили но:
по первому варианту возвращает ошибку : "SQL error code= -804 Data type unknown"
по второму выдает пустые значения
Ответить с цитированием
  #5  
Старый 01.11.2011, 09:41
_taddy _taddy вне форума
Прохожий
 
Регистрация: 27.10.2011
Адрес: Минск
Сообщения: 15
Версия Delphi: 2007
Репутация: 2767
По умолчанию

Я вообще проверяю запрос в IBExpert. Там оба варианта работают. А на какие компоненты Delphi он повешен?
Можно еще в первом случае попробовать тоже на параметр навесить CAST(:X AS SMALLINT)

Последний раз редактировалось _taddy, 01.11.2011 в 09:46.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter