Вопрос № 108301: Здравствуйте. Нужна помощь с SQL запросом.
Есть таблица в аксесе с полями fio и дата рождения (в формате даты).
Нужно построить запрос, который бы возвращал всех именинников следующей недели.
Наиболее простым мне кажется вариант с between...
Вопрос № 108.301
Здравствуйте. Нужна помощь с SQL запросом.
Есть таблица в аксесе с полями fio и дата рождения (в формате даты).
Нужно построить запрос, который бы возвращал всех именинников следующей недели.
Наиболее простым мне кажется вариант с between для текущей даты и даты, отстоящей от текущей на 7 дней. Но проблема в том что условие накладывается на некую воображаемую дату, у которой день и месяц берутся из даты рождения, а год - текущий. Как эту дату можно реализовать?
Вариант с отдельным сравнением номера дня и номера месяца использовать не хочется так как возникает очень много условий, если начало недели в одном месяце, а конец в другом.
Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, Зарипов Александр!
Если запрос будет выполняться в 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
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