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 |