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

MONTHS_BETWEEN() Funzione in Oracle

In Oracle Database, il MONTHS_BETWEEN() la funzione restituisce il numero di mesi tra due date.

Sintassi

La sintassi è questa:

MONTHS_BETWEEN(date1, date2)

Esempio

Ecco un esempio:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;

Risultato:

4

In questo caso mancano esattamente quattro mesi tra le due date.

Il mese e l'ultimo giorno del mese sono definiti 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.

Mesi frazionari

La funzione consente mesi frazionari. Se le due date includono porzioni di giorno diverse, Oracle Database elabora il componente frazionario applicabile da utilizzare.

Esempio:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;

Risultato:

3.51612903225806451612903225806451612903

Mesi negativi

Se la seconda data è successiva alla prima, viene restituito un importo negativo:

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;

Risultato:

-4

Date fuori intervallo

Le date zero e altre date fuori intervallo generano un errore.

Esempio:

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL
Error at Command Line : 1 Column : 47
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 .

Confronto di una data con la data corrente

Possiamo passare SYSDATE come argomento datetime per confrontare una data con la data corrente:

SELECT 
    SYSDATE,
    MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;

Risultato:

     SYSDATE     MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') 
____________ ____________________________________________ 
13/AUG/21       -102.587825194145758661887694145758661888

Argomento mancante

Chiamando MONTHS_BETWEEN() con il numero errato di argomenti, o senza passare alcun argomento, si verifica un errore:

SELECT MONTHS_BETWEEN()
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT MONTHS_BETWEEN()
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: