In Oracle Database possiamo usare LAST_DAY()
funzione per restituire l'ultimo giorno di un determinato mese. Può essere l'ultimo giorno del mese corrente o l'ultimo giorno del mese in base a una data specificata.
Esempio
SELECT LAST_DAY(date '2035-02-15')
FROM DUAL;
Risultato:
28-FEB-35
L'ultimo giorno del mese è definito dal parametro di sessione NLS_CALENDAR
. Vedi Come controllare i valori dei parametri NLS per scoprire quale calendario sta utilizzando la tua sessione. Il mio usa il calendario gregoriano.
Ecco cosa succede spostando la data in avanti di un anno:
SELECT LAST_DAY(date '2036-02-15')
FROM DUAL;
Risultato:
29-FEB-36
L'anno successivo è bisestile, quindi otteniamo 29 giorni nel febbraio di quell'anno.
Nota che il LAST_DAY()
la funzione restituisce un DATE
valore. Questo è vero anche se passiamo un TIMESTAMP
valore:
SELECT LAST_DAY(TIMESTAMP '2036-07-15 15:30:45.12345')
FROM DUAL;
Risultato:
31-JUL-36
Mese corrente
Questo esempio ottiene l'ultimo giorno del mese corrente:
SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL;
Risultato:
SYSDATE | LAST_DAY(SYSDATE) |
---|---|
12-APR-22 | 30-APR-22 |
In questo caso ho usato SYSDATE
per la data corrente.
Il prossimo mese
Possiamo usare il ADD_MONTHS()
funzione per aggiungere uno o più mesi alla data corrente:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, 1))
FROM DUAL;
Risultato:
SYSDATE | ULTIMO_GIORNO(AGGIUNGI_MESI(SYSDATE,1)) |
---|---|
12-APR-22 | 31-MAGGIO-22 |
In questo caso, abbiamo l'ultimo giorno del mese prossimo.
Il mese scorso
Possiamo aggiungere un valore negativo per ottenere l'ultimo giorno di un mese precedente:
SELECT
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE, -1))
FROM DUAL;
Risultato:
SYSDATE | ULTIMO_GIORNO(AGGIUNGI_MESI(SYSDATE,-1)) |
---|---|
12-APR-22 | 31-MAR-22 |