In Oracle Database, il LAST_DAY()
La funzione restituisce l'ultimo giorno del mese che contiene la data fornita.
Accetta un argomento, che è la data per la quale vuoi trovare l'ultimo giorno del mese.
Sintassi
La sintassi è questa:
LAST_DAY(date)
Dove date
è l'espressione di data per la quale vuoi trovare l'ultimo giorno del mese.
Esempio
Ecco un esempio:
SELECT LAST_DAY(DATE '2030-02-01')
FROM DUAL;
Risultato:
28-FEB-30
In questo caso, stiamo usando una data a febbraio. A quanto pare, febbraio ha 28 giorni in quell'anno.
Ecco cosa succede se incrementiamo la data all'anno bisestile successivo:
SELECT LAST_DAY(DATE '2032-02-01')
FROM DUAL;
Risultato:
29-FEB-32
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.
Inoltre, la data viene restituita nel formato specificato per la tua sessione. In questo esempio, la mia sessione utilizza il formato predefinito per quando NLS_TERRITORY
il parametro è impostato su AMERICA
. Se lo desideri, puoi sempre modificare i formati data/ora della sessione.
Altri valori di data e ora
Funziona anche con altri valori datetime, come TIMESTAMP
, ecc:
SELECT LAST_DAY(TIMESTAMP '2030-02-01 10:30:45.34567')
FROM DUAL;
Risultato:
28-FEB-30
Tuttavia, il tipo restituito è sempre DATE
, indipendentemente dal tipo di dati dell'argomento.
Date fuori intervallo
Le date zero e altre date fuori intervallo generano un errore.
Esempio:
SELECT LAST_DAY(DATE '0000-00-00')
FROM DUAL;
Risultato:
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
Come indica il messaggio di errore, l'anno (completo) deve essere compreso tra -4713
e +9999
, e non essere 0
.
Data attuale
Possiamo passare SYSDATE
come argomento datetime per utilizzare la data corrente:
SELECT
SYSDATE,
LAST_DAY(SYSDATE)
FROM DUAL;
Risultato:
SYSDATE LAST_DAY(SYSDATE) ____________ ____________________ 12-AUG-21 31-AUG-21
Argomento mancante
Chiamando LAST_DAY()
con il numero errato di argomenti, o senza passare alcun argomento, genera un errore:
SELECT LAST_DAY()
FROM DUAL;
Risultato:
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: