In Oracle Database, de MONTHS_BETWEEN()
functie retourneert het aantal maanden tussen twee datums.
Syntaxis
De syntaxis gaat als volgt:
MONTHS_BETWEEN(date1, date2)
Voorbeeld
Hier is een voorbeeld:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;
Resultaat:
4
In dit geval zitten er precies vier maanden tussen de twee datums.
De maand en de laatste dag van de maand worden gedefinieerd door de sessieparameter NLS_CALENDAR
. Zie Hoe u de waarden van de NLS-parameters kunt controleren om erachter te komen welke agenda uw sessie gebruikt. De mijne gebruikt de Gregoriaanse kalender.
Fractionele maanden
De functie staat fractionele maanden toe. Als de twee datums verschillende dagdelen bevatten, berekent Oracle Database de toepasselijke fractionele component die moet worden gebruikt.
Voorbeeld:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;
Resultaat:
3.51612903225806451612903225806451612903
Negatieve maanden
Als de tweede datum later is dan de eerste, wordt een negatief bedrag geretourneerd:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;
Resultaat:
-4
Data buiten bereik
Nuldatums en andere datums die buiten het bereik vallen, resulteren in een fout.
Voorbeeld:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;
Resultaat:
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
Zoals de foutmelding aangeeft, moet het (volledige) jaar tussen -4713
. zijn en +9999
, en niet 0
. zijn .
Een datum vergelijken met de huidige datum
We kunnen SYSDATE
doorgeven als het datetime-argument om een datum te vergelijken met de huidige datum:
SELECT
SYSDATE,
MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;
Resultaat:
SYSDATE MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') ____________ ____________________________________________ 13/AUG/21 -102.587825194145758661887694145758661888
Ontbrekend argument
Bellen MONTHS_BETWEEN()
met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten, resulteert in een fout:
SELECT MONTHS_BETWEEN()
FROM DUAL;
Resultaat:
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: