Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.035 c
14-1118892226
Магнум
2005-06-16 07:23
2005.07.18
Глеб Павловский


3-1118325174
Lenik
2005-06-09 17:52
2005.07.18
Передача параметров из Делфи в StoredProc SQL сервера


3-1117710731
andrex
2005-06-02 15:12
2005.07.18
Отмена изменений


9-1112783898
@!!ex
2005-04-06 14:38
2005.07.18
Пересечение объектов.


4-1117101550
Dufe
2005-05-26 13:59
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский