I Oracle Database, MONTHS_BETWEEN()
funktion returnerar antalet månader mellan två datum.
Syntax
Syntaxen ser ut så här:
MONTHS_BETWEEN(date1, date2)
Exempel
Här är ett exempel:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;
Resultat:
4
I det här fallet är det exakt fyra månader mellan de två datumen.
Månaden och den sista dagen i månaden definieras av sessionsparametern NLS_CALENDAR
. Se Hur du kontrollerar värdena för NLS-parametrarna för att ta reda på vilken kalender din session använder. Min använder den gregorianska kalendern.
Bråkmånader
Funktionen tillåter bråkdelar av månader. Om de två datumen inkluderar olika dagsdelar, räknar Oracle Database ut vilken tillämplig delkomponent som ska användas.
Exempel:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;
Resultat:
3.51612903225806451612903225806451612903
Negativa månader
Om det andra datumet är senare än det första, returneras ett negativt belopp:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;
Resultat:
-4
Datum utanför intervallet
Noll datum och andra datum utanför intervallet resulterar i ett fel.
Exempel:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;
Resultat:
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
Som felmeddelandet anger måste (hela) året vara mellan -4713
och +9999
, och inte vara 0
.
Jämföra ett datum med det aktuella datumet
Vi kan skicka SYSDATE
som datetime-argument för att jämföra ett datum med det aktuella datumet:
SELECT
SYSDATE,
MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;
Resultat:
SYSDATE MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') ____________ ____________________________________________ 13/AUG/21 -102.587825194145758661887694145758661888
Argument saknas
Ringer MONTHS_BETWEEN()
med fel antal argument, eller utan att skicka några argument, resulterar i ett fel:
SELECT MONTHS_BETWEEN()
FROM DUAL;
Resultat:
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: