Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: 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 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
4-1116761869
dEd
2005-05-22 15:37
2005.07.18
Очистка буфера клавиатуры


1-1120214242
Тучудище
2005-07-01 14:37
2005.07.18
Перекодирование из GSM(7 битной кодировки) в ASCII например


14-1119806066
Nick Denry
2005-06-26 21:14
2005.07.18
Народ, а если на разделе обе MFT (NTFS)


4-1116386312
Владимир_К
2005-05-18 07:18
2005.07.18
как вызвать окно выбора папки?


5-1090160484
Maxim
2004-07-18 18:21
2005.07.18
Иконка, Сообщения