Oracle
 sql >> Datenbank >  >> RDS >> Oracle

MONTHS_BETWEEN()-Funktion in Oracle

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: