In der Oracle-Datenbank die MONTHS_BETWEEN()
Funktion gibt die Anzahl der Monate zwischen zwei Daten zurück.
Syntax
Die Syntax lautet wie folgt:
MONTHS_BETWEEN(date1, date2)
Beispiel
Hier ist ein Beispiel:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;
Ergebnis:
4
In diesem Fall liegen genau vier Monate zwischen den beiden Daten.
Der Monat und der letzte Tag des Monats werden durch den Sitzungsparameter NLS_CALENDAR
definiert . Siehe So überprüfen Sie die Werte der NLS-Parameter, um herauszufinden, welchen Kalender Ihre Sitzung verwendet. Meiner verwendet den gregorianischen Kalender.
Bruchmonate
Die Funktion lässt Bruchteile von Monaten zu. Wenn die beiden Datumsangaben unterschiedliche Tagesabschnitte enthalten, ermittelt Oracle Database die zu verwendende Bruchteilkomponente.
Beispiel:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;
Ergebnis:
3.51612903225806451612903225806451612903
Negative Monate
Wenn das zweite Datum nach dem ersten liegt, wird ein negativer Betrag zurückgegeben:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;
Ergebnis:
-4
Außerhalb des Bereichs liegende Daten
Nulldaten und andere Daten außerhalb des zulässigen Bereichs führen zu einem Fehler.
Beispiel:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;
Ergebnis:
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
Wie in der Fehlermeldung angegeben, muss das (vollständige) Jahr zwischen -4713
liegen und +9999
, und nicht 0
sein .
Ein Datum mit dem aktuellen Datum vergleichen
Wir können SYSDATE
übergeben als datetime-Argument, um ein Datum mit dem aktuellen Datum zu vergleichen:
SELECT
SYSDATE,
MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;
Ergebnis:
SYSDATE MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') ____________ ____________________________________________ 13/AUG/21 -102.587825194145758661887694145758661888
Fehlendes Argument
Aufruf von MONTHS_BETWEEN()
mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT MONTHS_BETWEEN()
FROM DUAL;
Ergebnis:
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: