Вниз
Скачать: CL | DM;

Напоминалка для Дней Рождения   Найти похожие ветки 

← →
Harry7 ©   (2005-06-02 14:38) [0]

Всем здравствуйте.
Такую вот штуку пишу. Хочется, чтобы программа выдавала напоминание о днях рождения за выбранное количество дней.
Есть база пиплов с занесенными датами рождения. Есть форма с 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-02 14:54) [1]

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)


← →
Anatoly Podgoretsky ©   (2005-06-02 16:06) [2]

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


← →
Johnmen ©   (2005-06-02 16:12) [3]

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

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


← →
Anatoly Podgoretsky ©   (2005-06-02 16:17) [4]

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


← →
ANB ©   (2005-06-03 08:21) [5]

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

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


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


← →
Johnmen ©   (2005-06-03 09:39) [6]

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

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

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


← →
stud ©   (2005-06-03 10:33) [7]

вот возник вариант
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 10:49) [8]

>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))



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
1-1120025152
rooker
2005-06-29 10:05
2005.07.18
главное окно программы


14-1119631258
Kerk
2005-06-24 20:40
2005.07.18
Флудеры - кто они?


14-1118884201
Ozone
2005-06-16 05:10
2005.07.18
Дыра в безопасности (SMTP)


1-1120159595
GanibalLector
2005-06-30 23:26
2005.07.18
CustomSort в TStringList


1-1119796400
Starcom
2005-06-26 18:33
2005.07.18
Открытие Microsoft Word документа в приложении...




   Наверх