Oracle
 sql >> Database >  >> RDS >> Oracle

LAST_DAY() Funzione in Oracle

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: