sql >> Database teknologi >  >> RDS >> Oracle

MONTHS_BETWEEN() Funktion i Oracle

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:

  1. Opret en SQL Server-database med Azure Data Studio

  2. Brug af COALESCE til at håndtere NULL-værdier i PostgreSQL

  3. Hvordan genererer man et unikt id i MySQL?

  4. Liste kolonner med indekser i PostgreSQL