I Oracle Database er MONTHS_BETWEEN()
funktion returnerer antallet af måneder mellem to datoer.
Syntaks
Syntaksen ser sådan ud:
MONTHS_BETWEEN(date1, date2)
Eksempel
Her er et eksempel:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;
Resultat:
4
I dette tilfælde er der præcis fire måneder mellem de to datoer.
Måneden og den sidste dag i måneden er defineret af sessionsparameteren NLS_CALENDAR
. Se, hvordan du tjekker værdierne af NLS-parametrene for at finde ud af, hvilken kalender din session bruger. Min bruger den gregorianske kalender.
Fraktionelle måneder
Funktionen giver mulighed for brøkdele af måneder. Hvis de to datoer inkluderer forskellige dagsdele, regner Oracle Database ud af den relevante delkomponent, der skal bruges.
Eksempel:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;
Resultat:
3.51612903225806451612903225806451612903
Negative måneder
Hvis den anden dato er senere end den første, returneres et negativt beløb:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;
Resultat:
-4
Datoer uden for rækkevidde
Nuldatoer og andre datoer uden for intervallet resulterer i en fejl.
Eksempel:
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 fejlmeddelelsen angiver, skal (hele) året være mellem -4713
og +9999
, og ikke være 0
.
Sammenligning af en dato med den aktuelle dato
Vi kan sende SYSDATE
som datetime-argument for at sammenligne en dato med den aktuelle dato:
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
Manglende argument
Kalder MONTHS_BETWEEN()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:
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: