sql >> Database >  >> RDS >> Oracle

MONTHS_BETWEEN() Functie in Oracle

In Oracle Database, de MONTHS_BETWEEN() functie retourneert het aantal maanden tussen twee datums.

Syntaxis

De syntaxis gaat als volgt:

MONTHS_BETWEEN(date1, date2)

Voorbeeld

Hier is een voorbeeld:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;

Resultaat:

4

In dit geval zitten er precies vier maanden tussen de twee datums.

De maand en de laatste dag van de maand worden gedefinieerd door de sessieparameter NLS_CALENDAR . Zie Hoe u de waarden van de NLS-parameters kunt controleren om erachter te komen welke agenda uw sessie gebruikt. De mijne gebruikt de Gregoriaanse kalender.

Fractionele maanden

De functie staat fractionele maanden toe. Als de twee datums verschillende dagdelen bevatten, berekent Oracle Database de toepasselijke fractionele component die moet worden gebruikt.

Voorbeeld:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;

Resultaat:

3.51612903225806451612903225806451612903

Negatieve maanden

Als de tweede datum later is dan de eerste, wordt een negatief bedrag geretourneerd:

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;

Resultaat:

-4

Data buiten bereik

Nuldatums en andere datums die buiten het bereik vallen, resulteren in een fout.

Voorbeeld:

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;

Resultaat:

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

Zoals de foutmelding aangeeft, moet het (volledige) jaar tussen -4713 . zijn en +9999 , en niet 0 . zijn .

Een datum vergelijken met de huidige datum

We kunnen SYSDATE doorgeven als het datetime-argument om een ​​datum te vergelijken met de huidige datum:

SELECT 
    SYSDATE,
    MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;

Resultaat:

     SYSDATE     MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') 
____________ ____________________________________________ 
13/AUG/21       -102.587825194145758661887694145758661888

Ontbrekend argument

Bellen MONTHS_BETWEEN() met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten, resulteert in een fout:

SELECT MONTHS_BETWEEN()
FROM DUAL;

Resultaat:

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. Hoe postgresql postgresql.conf listen_addresses voor meerdere ip-adressen te configureren

  2. Is er een manier om updates/verwijderingen uit te schakelen, maar toch triggers toe te staan ​​om ze uit te voeren?

  3. SQL Server Bulk Insert – Deel 1

  4. Databasehoek:beginnershandleiding voor Mysql-opslagengines