Если вы ищете теоретический ответ (то есть: не вводите его в производство), это может сработать:
Предварительные условия: иметь три таблицы: days_seq (day_seq), month_seq (mth_seq) иyear_seq (yr_seq) days имеет номера 1 ... 31, месяц 1..12, годы 2011 ....?
Использовать следующий запрос (я использовал доступ, потому что у меня нет доступных доступных СУБДздесь, имейте в виду, что MS-ACCESS / JET простит использование функции Dateserial, то есть она не прерывается, когда вы запрашиваете серию даты для 30 февраля 2012 г.)
SELECT Max(DateSerial(
[year_seq]![yr_seq]
,[month_seq]![mth_seq]
, [days_seq]![day_seq]))
-
Min(DateSerial(
[year_seq]![yr_seq]
,[month_seq]![mth_seq]
,[days_seq]![day_seq])) AS days
FROM days_seq, month_seq, year_seq
WHERE DateSerial(
[year_seq]![yr_seq]
,[month_seq]![mth_seq]
,[days_seq]![day_seq])
BETWEEN #2012-02-1# AND #2012-02-28#
В основном запрос производит картезианский продукт из трех таблиц, который генерирует все возможные дни в месяцах, месяцы в году на столько лет, сколько у вас есть в таблице лет.
Бонус: вы можете сгенерировать перманент вне курсаКалендарная таблица, как предлагает X-Zero.
настольный календарь ([дата])
INSERT INTO calendar
SELECT DISTINCT DateSerial(
[year_seq]![yr_seq]
,[month_seq]![mth_seq]
, [days_seq]![day_seq]))
FROM days_seq, month_seq, year_seq
Вам все еще нужно выбирать свой начальный год и год окончания с умом.В соответствии с окончанием Майя 21 декабря 2012 года.