W Oracle Database możemy użyć LAST_DAY() funkcja zwracająca ostatni dzień danego miesiąca. Może to być ostatni dzień bieżącego miesiąca lub ostatni dzień miesiąca na podstawie określonej daty.
Przykład
SELECT LAST_DAY(date '2035-02-15')
FROM DUAL; Wynik:
28-FEB-35
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.
Oto, co się dzieje, gdy przesuniemy datę o rok do przodu:
SELECT LAST_DAY(date '2036-02-15')
FROM DUAL; Wynik:
29-FEB-36
Następny rok jest rokiem przestępnym, więc w lutym tego roku mamy 29 dni.
Zauważ, że LAST_DAY() funkcja zwraca DATE wartość. Dzieje się tak, nawet jeśli przekażemy TIMESTAMP wartość:
SELECT LAST_DAY(TIMESTAMP '2036-07-15 15:30:45.12345')
FROM DUAL; Wynik:
31-JUL-36
Bieżący miesiąc
Ten przykład pokazuje ostatni dzień bieżącego miesiąca:
SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL; Wynik:
| SYSDATE | LAST_DAY(SYSDATE) |
|---|---|
| 12-kwiecień-22 | 30-22 kwietnia |
W tym przypadku użyłem SYSDATE dla bieżącej daty.
Następny miesiąc
Możemy użyć ADD_MONTHS() funkcja, aby dodać jeden lub więcej miesięcy do bieżącej daty:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, 1))
FROM DUAL; Wynik:
| SYSDATE | LAST_DAY(ADD_MONTHS(SYSDATE;1)) |
|---|---|
| 12-kwiecień-22 | 31-22-MAJA |
W tym przypadku mamy ostatni dzień przyszłego miesiąca.
Ostatni miesiąc
Możemy dodać wartość ujemną, aby uzyskać ostatni dzień poprzedniego miesiąca:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, -1))
FROM DUAL; Wynik:
| SYSDATE | LAST_DAY(ADD_MONTHS(SYSDATE,-1)) |
|---|---|
| 12-kwiecień-22 | 31 marca-22 |