Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

Народное голосование ПРЕМИИ РУНЕТА-2007!
Голосуем за RusFAQ.ru >>

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 300
от 12.11.2007, 06:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 453, Экспертов: 63
В номере:Вопросов: 1, Ответов: 2


Вопрос № 108301: Здравствуйте. Нужна помощь с SQL запросом. Есть таблица в аксесе с полями fio и дата рождения (в формате даты). Нужно построить запрос, который бы возвращал всех именинников следующей недели. Наиболее простым мне кажется вариант с between...

Вопрос № 108.301
Здравствуйте. Нужна помощь с SQL запросом.
Есть таблица в аксесе с полями fio и дата рождения (в формате даты).
Нужно построить запрос, который бы возвращал всех именинников следующей недели.
Наиболее простым мне кажется вариант с between для текущей даты и даты, отстоящей от текущей на 7 дней. Но проблема в том что условие накладывается на некую воображаемую дату, у которой день и месяц берутся из даты рождения, а год - текущий. Как эту дату можно реализовать?
Вариант с отдельным сравнением номера дня и номера месяца использовать не хочется так как возникает очень много условий, если начало недели в одном месяце, а конец в другом.
Отправлен: 06.11.2007, 19:52
Вопрос задал: Зарипов Александр (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, Зарипов Александр!
Если запрос будет выполняться в Access, то он может выглядеть так:
SELECT DateSerial(Year(Date()),Month([DOB]),Day([DOB]))
FROM Table
WHERE DateSerial(Year(Date()),Month([DOB]),Day([DOB])) Between Date() And Date()+7
Ответ отправил: Тесленко Евгений Алексеевич (статус: Студент)
Ответ отправлен: 06.11.2007, 22:51
Оценка за ответ: 5
Комментарий оценки:
То что надо. Отлично!

Отвечает: Титов Михаил Анатольевич
Здравствуйте, Зарипов Александр!

Можно использовать функцию. Например (возвращает чистую дату дня рождения в текущем году по дате рождения) :

Public Function Birthday(BirthDate As Date) As Date
Dim today As Date

today = Now()

Birthday = DateAdd("y", DatePart("y", BirthDate), CDate(CLng(today) - DatePart("y", today)))

End Function

Далее запрос

SELECT Name, BirthDate, Birthday( BirthDate) AS Birthday
FROM Staff
WHERE Birthday( BirthDate) Between Now() AND DateAdd("d",7,Now());

Выдаст всех у кого день рождения выпадает на следующие 7 дней. На больших таблицах (~ 100 000 записей), будут проблемы, но для списка сотрудников компании вполне подойдет ...

Ответ отправил: Титов Михаил Анатольевич (статус: 2-ой класс)
Ответ отправлен: 07.11.2007, 03:59


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.62.0 от 08.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное