Первый и последний день месяца в 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 )
лучше использовать форматирование первого дня как TO_DATE(TRUNC(date,’MM’),’DD.MM.RRRR’).
В случае DD.MM.YYYY есть риск получить 01.05.0023