Про науку  Про жизнь  Про IT  Про спорт  Про книги  Разное

Проекты: Эйнштейны

Первый и последний день месяца в PL/SQL

Недавно наткнулся на необходимость написать запрос на PL/SQL, который выводил бы все записи за текущий месяц, причем захватываю пару дней до начала месяца и пару дней после его окончания. Например, с 29.04 по 02.06.

Оказалось, что в PL/SQL есть функция LAST_DAY ( DATE ). Она выдает последний день месяца переданной ей даты. Но почему-то нет функции FIRST_DAY ( DATE ) — получения первого дня месяца. Ее роль выполняет вот такое выражение:

TO_DATE ( TRUNC ( DATE, 'MM' ), 'DD.MM.YYYY' )

Казалось бы, почему не сделать функцию FIRST_DAY?

В итоге:

  • первый день месяца: TO_DATE ( TRUNC ( DATE, ’MM’ ), ’DD.MM.YYYY’ );
  • последний день месяца: LAST_DAY ( DATE ).

А условие запроса с двумя днями соответственно выглядит вот так:

...AND a.request_date BETWEEN ( TO_DATE ( TRUNC ( SYSDATE, 'MM' ), 'DD.MM.YYYY' ) - 2 ) AND ( LAST_DAY ( SYSDATE ) + 2 )
Отправить
Поделиться
1 комментарий
Феофан Грек 2023

лучше использовать форматирование первого дня как TO_DATE(TRUNC(date,’MM’),’DD.MM.RRRR’).
В случае DD.MM.YYYY есть риск получить 01.05.0023