powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird. Перечислить даты указанного месяца
7 сообщений из 7, страница 1 из 1
Firebird. Перечислить даты указанного месяца
    #38861311
tarakan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста как в Firebird перечислить даты указанного месяца и года, например,
Код: sql
1.
SELECT [ВСЕ ДАТЫ МЕСЯЦА] WHERE [МЕСЯЦ = 01{январь}] AND [ГОД = 2015]
...
Рейтинг: 0 / 0
Firebird. Перечислить даты указанного месяца
    #38861352
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tarakan,

читайте в доке рассказы про ф-ции для работы с датами (в частности - extract & dateadd).

Неплохо будет работать селективная ХП с входными параметрами a_year, a_month () и циклом из макс. 31 итерации.
Но в соединениях её придется всегда указывать ведомой, т.е. select ... from some_table left join sp_get_dates on ... - а это лишает оптимизатор возможности выбора ведущего источника.

Второй способ - заведите таблицу-календарь со всеми датами от 01.01.0001 до 31.12.9999 (их около 3.6 млн).
Добавьте индекс computed by ( extract(year from d) * 100 + extract(month from d) - и затем делайте выборку из неё по этому индексу, применяя extract()*100 + extract() к вашим :a_year, :a_month.

Можно всё вытащить и на чистом SQL, без таблиц и ХП, но по скорости это будет хуже из-за лишних обращений к rdb$database.
...
Рейтинг: 0 / 0
Firebird. Перечислить даты указанного месяца
    #38861354
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tarakan,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH RECURSIVE T (BYDATE, ENDDATE)
AS (SELECT
        DATE '01.01.2015',
        DATEADD(1 MONTH TO DATE '01.01.2015')
    FROM
        RDB$DATABASE
    UNION ALL
    SELECT
        DATEADD(1 DAY TO BYDATE),
        ENDDATE
    FROM
        T
    WHERE DATEADD(1 DAY TO BYDATE) < ENDDATE)
SELECT
    BYDATE
FROM
    T
...
Рейтинг: 0 / 0
Firebird. Перечислить даты указанного месяца
    #38861455
tarakan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное!
...
Рейтинг: 0 / 0
Firebird. Перечислить даты указанного месяца
    #38861505
tarakan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поспешил...
Симонов Денис,
Если делаю запрос
Код: sql
1.
2.
3.
4.
5.
SELECT
        DATE '01.12.2014',
        DATEADD(1 MONTH TO DATE '31.12.2014')
    FROM
        RDB$DATABASE


то возвращается
CONSTANT - 01.12.2014
DATEADD - 31.01.2015
Почему так?
...
Рейтинг: 0 / 0
Firebird. Перечислить даты указанного месяца
    #38861515
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tarakan,

всё правильно. У меня в примере я к начальной дате прибавляю. А ты к последней дате месяца добавляешь.
...
Рейтинг: 0 / 0
Firebird. Перечислить даты указанного месяца
    #38861610
tarakan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Понял, лохонулся чуть-чуть, спасибо еще раз!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird. Перечислить даты указанного месяца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]