Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Напоминалка для Дней Рождения [D6, Paradox]


Harry7 ©   (2005-06-02 14:38:00) 

Всем здравствуйте.
Такую вот штуку пишу. Хочется, чтобы программа выдавала напоминание о днях рождения за выбранное количество дней.
Есть база пиплов с занесенными датами рождения. Есть форма с SQL-запросом и DBGrid, есть два календаря для
указания граничных значений времени (интервал "от" и "до").
Запрос:
SELECT Base."Code", Base."Name", Base."Birthday"
FROM "Base.DB" Base
WHERE Base."Birthday" BETWEEN :OT AND :DO


:OT и :DO - соответственно значения, которые будут выбираться в двух календарях на форме
Запрос должен вернуть людей, у которых ДР в интервале "от"-"до".
Но год мне не нужен, нужно, чтобы из даты выхватывался месяц. Из величин ОТ и ДО я его достаю функциями
DecodeDate(OT, Year, Month, Day) и DecodeDate(DO, Year, Month, Day). А вот как достать из набора данных

Base."Birthday"? Там полная дата, день-месяц-год, сравнивать ее с месяцем - некорректно.
Как извлечь месяц из поля DateTime базы данных?


Johnmen   (2005-06-03 10:49:00) [1]

>Anatoly Podgoretsky ©   (02.06.05 16:17) [4]

Подправил :)

SELECT * FROM Base
WHERE EXTRACT(DAY FROM Birthday)+100*EXTRACT(MONTH FROM Birthday)
+10000*(EXTRACT(YEAR FROM Birthday)-EXTRACT(YEAR FROM :OT))
BETWEEN
EXTRACT(DAY FROM :OT)+100*EXTRACT(MONTH FROM :OT)
AND
EXTRACT(DAY FROM :DO)+100*EXTRACT(MONTH FROM :DO)+
+10000*(EXTRACT(YEAR FROM :DO)-EXTRACT(YEAR FROM :OT))


stud   (2005-06-03 10:33:00) [2]

вот возник вариант
SELECT Base."Code", Base."Name", Base."Birthday"
FROM "Base.DB" Base
WHERE :dd-Base."Birthday" between :ot and :od
где :dd - параметр типа дата представляет собой текущий месяц и день но год=году рождения чела, т.е. при :dd-Base."Birthday" получаем количество дней меджу датами которое должно попасть в интервал :ot and :od - целые числа


Johnmen   (2005-06-03 09:39:00) [3]

>ANB ©   (03.06.05 08:21) [5]

Я всегда недоумеваю, зачем говорят не по теме. Причём сами же в этом сознаются!
Словесный понос ? Скука ? Неуместное желание показать свои знания ? Или что ?

PS А насчёт Оракла, не думаю, что всё ТАК запущено.


ANB   (2005-06-03 08:21:00) [4]

В оракле будет так :

create table test_BD (dtBD date)

select Dtbd
 from (select Dtbd
             ,to_date (to_char (Dtbd, 'DD.MM.') || to_char (to_date (:Dtbegdate, 'DD.MM.YYYY'), 'YYYY'), 'DD.MM.YYYY') Dtbd_F
         from Test_Bd
       union all
       select Dtbd
             ,to_date (to_char (Dtbd, 'DD.MM.') || to_char (to_number (to_char (to_date (:Dtbegdate, 'DD.MM.YYYY'), 'YYYY')) + 1)
                      ,'DD.MM.YYYY'
                      ) Dtbd_F
         from Test_Bd)
where Dtbd_F between to_date (:Dtbegdate, 'DD.MM.YYYY') and to_date (:Dtbegdate, 'DD.MM.YYYY') + :Days


А как в парадоксе - не знаю :(((((


Anatoly Podgoretsky   (2005-06-02 16:17:00) [5]

Johnmen ©   (02.06.05 16:12) [3]
Я тестил, у меня была аналогичная задача


Johnmen   (2005-06-02 16:12:00) [6]

>Anatoly Podgoretsky ©   (02.06.05 16:06) [2]

Возможно. Я не тестил. Так, общий план :)


Anatoly Podgoretsky   (2005-06-02 16:06:00) [7]

Johnmen ©   (02.06.05 14:54) [1]
Только частично рабочее решение, даст неверный результат при в декабре=январе.


Johnmen   (2005-06-02 14:54:00) [8]

SELECT * FROM Base
WHERE EXTRACT(DAY FROM Birthday)+100*EXTRACT(MONTH FROM Birthday)
BETWEEN
EXTRACT(DAY FROM :OT)+100*EXTRACT(MONTH FROM :OT)
AND
EXTRACT(DAY FROM :DO)+100*EXTRACT(MONTH FROM :DO)


Наверх

Титульная страница Поиск, карта сайта Написать письмо