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: