W bazie danych Oracle LAST_DAY()
funkcja zwraca ostatni dzień miesiąca, który zawiera podaną datę.
Przyjmuje jeden argument, którym jest data, dla której chcesz znaleźć ostatni dzień miesiąca.
Składnia
Składnia wygląda tak:
LAST_DAY(date)
Gdzie date
to wyrażenie daty, dla którego chcesz znaleźć ostatni dzień miesiąca.
Przykład
Oto przykład:
SELECT LAST_DAY(DATE '2030-02-01')
FROM DUAL;
Wynik:
28-FEB-30
W tym przypadku używamy daty w lutym. Jak się okazuje, luty ma w tym roku 28 dni.
Oto, co się stanie, jeśli zwiększymy datę do następnego roku przestępnego:
SELECT LAST_DAY(DATE '2032-02-01')
FROM DUAL;
Wynik:
29-FEB-32
Ostatni dzień miesiąca jest określony przez parametr sesji NLS_CALENDAR
. Zobacz Jak sprawdzić wartości parametrów NLS, aby dowiedzieć się, z którego kalendarza korzysta Twoja sesja. Mój używa kalendarza gregoriańskiego.
Ponadto data jest zwracana w formacie określonym dla Twojej sesji. W tym przykładzie moja sesja używa domyślnego formatu, gdy NLS_TERRITORY
parametr jest ustawiony na AMERICA
. Jeśli chcesz, zawsze możesz zmienić format daty i godziny sesji.
Inne wartości daty i godziny
Działa również z innymi wartościami daty i godziny, takimi jak TIMESTAMP
itp:
SELECT LAST_DAY(TIMESTAMP '2030-02-01 10:30:45.34567')
FROM DUAL;
Wynik:
28-FEB-30
Jednak zwracany typ to zawsze DATE
, niezależnie od typu danych argumentu.
Daty spoza zakresu
Data zerowa i inne daty spoza zakresu skutkują błędem.
Przykład:
SELECT LAST_DAY(DATE '0000-00-00')
FROM DUAL;
Wynik:
Error starting at line : 1 in command - SELECT LAST_DAY(DATE '0000-00-00') FROM DUAL Error at Command Line : 1 Column : 22 Error report - SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0 01841. 00000 - "(full) year must be between -4713 and +9999, and not be 0" *Cause: Illegal year entered *Action: Input year in the specified range
Zgodnie z komunikatem o błędzie (pełny) rok musi mieścić się w przedziale -4713
i +9999
i nie być 0
.
Aktualna data
Możemy przekazać SYSDATE
jako argument datetime, aby użyć bieżącej daty:
SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL;
Wynik:
SYSDATE LAST_DAY(SYSDATE) ____________ ____________________ 12-AUG-21 31-AUG-21
Brakujący argument
Wywołanie LAST_DAY()
z niewłaściwą liczbą argumentów lub bez przekazywania jakichkolwiek argumentów powoduje błąd:
SELECT LAST_DAY()
FROM DUAL;
Wynik:
Error starting at line : 1 in command - SELECT LAST_DAY() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: