Jak ustawić datę na pierwszy i ostatni dzień miesiąca?



Czasem potrzebujemy do naszej aplikacji wyznaczenie konkretnej daty. Najczęściej chcemy ustalić pierwszy czy ostatni dzień miesiąca.
Z ostatnim dniem miesiąca nie ma najmniejszego problemu. Oracle wyposażył nas w dedykowaną funkcję LAST_DAY. Funkcja ta wyznacza nam ostatni dzień miesiąca dla daty przekazanej parametrem.

 select last_day(sysdate) from dual;  

A co z pierwszym dniem miesiąca? Nie ma funkcji typu first_day...

Jednym ze sposobów jest ustalenie pierwszego dnia miesiąca "na piechotę". Jest to konstrukcja dość ekwilibrystyczna lecz najczęściej przeze mnie spotykana w kodzie aplikacji.

 select to_date('01-'|| to_char(sysdate, 'mm-yyyy'), 'dd-mm-yyyy') pierwszy_dzien from dual;  

Da się? da się. Ale może jest bardziej elegancki sposób?
Otóż jest i to bardzo elegancki. Znana nam doskonale funkcja TRUNC!
Trunc najczęściej stosujemy do danych numerycznych w celu obcięcia części dziesiętnej albo do dat, w celu obcięcia godzin i minut. Ale TRUNC ma również wiele innych zastosowań. Między innymi możemy za pomocą tej funkcji ustawić pierwszy dzień miesiąca!

 select trunc(sysdate, 'MONTH') from dual;  

Funkcja ma jeszcze więcej możliwości: możemy ustawić pierwszy dzień kwartału, pierwszy dzień tygodnia, pierwszy dzień roku itp

O wszystkich możliwości TRUNC'a można przeczytać w dokumentacji :D


Komentarze

  1. -- Przyda się do harmonogramowania wykonania raportu tuż przed 24tą
    -- czas data - ostatni dzien miesiaca i godzina 23:58
    select trunc(last_day(sysdate)) + (1-120/(60*60*24)) from dual;

    OdpowiedzUsuń

Prześlij komentarz