I Oracle Database kan vi använda LAST_DAY()
funktion för att returnera den sista dagen i en given månad. Detta kan vara den sista dagen i den aktuella månaden eller den sista dagen i månaden baserat på ett angivet datum.
Exempel
SELECT LAST_DAY(date '2035-02-15')
FROM DUAL;
Resultat:
28-FEB-35
Den sista dagen i månaden definieras av sessionsparametern NLS_CALENDAR
. Se Hur du kontrollerar värdena för NLS-parametrarna för att ta reda på vilken kalender din session använder. Min använder den gregorianska kalendern.
Det här är vad som händer när vi flyttar fram datumet ett år:
SELECT LAST_DAY(date '2036-02-15')
FROM DUAL;
Resultat:
29-FEB-36
Följande år är ett skottår, så vi får 29 dagar i februari det året.
Observera att LAST_DAY()
funktion returnerar en DATE
värde. Detta är sant även om vi skickar en TIMESTAMP
värde:
SELECT LAST_DAY(TIMESTAMP '2036-07-15 15:30:45.12345')
FROM DUAL;
Resultat:
31-JUL-36
Aktuell månad
Det här exemplet får den sista dagen i den aktuella månaden:
SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL;
Resultat:
SYSDATE | LAST_DAY(SYSDATE) |
---|---|
12-APR-22 | 30-APR-22 |
I det här fallet använde jag SYSDATE
för det aktuella datumet.
Nästa månad
Vi kan använda ADD_MONTHS()
funktion för att lägga till en eller flera månader till det aktuella datumet:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, 1))
FROM DUAL;
Resultat:
SYSDATE | LAST_DAY(ADD_MONTHS(SYSDATE,1)) |
---|---|
12-APR-22 | 31-22 MAJ |
I det här fallet fick vi den sista dagen i nästa månad.
Förra månaden
Vi kan lägga till ett negativt värde för att få den sista dagen i en föregående månad:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, -1))
FROM DUAL;
Resultat:
SYSDATE | LAST_DAY(ADD_MONTHS(SYSDATE,-1)) |
---|---|
12-APR-22 | 31-MAR-22 |