Главная страница
    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.46 MB
Время: 0.037 c
1-1119961554
Mishenka
2005-06-28 16:25
2005.07.18
Как в ListView CheckBoxes отловить событие установки галки?


14-1118818636
nik90210
2005-06-15 10:57
2005.07.18
Кто нибудь посещает вап-сайты?


3-1118233992
Kirill_21
2005-06-08 16:33
2005.07.18
Добавление данных в DB


14-1119980094
easy
2005-06-28 21:34
2005.07.18
wireless сети


14-1118775528
WondeRu
2005-06-14 22:58
2005.07.18
Давайте кошку Шредингера мучать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский