sql >> Databasteknik >  >> RDS >> Oracle

MONTHS_BETWEEN() Funktion i Oracle

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:

  1. Varning:mysqli_query():Det gick inte att hämta mysqli

  2. Använda en vy utan primärnyckel med Entity

  3. Android-fel:Kan inte utföra den här åtgärden eftersom anslutningspoolen har stängts

  4. Hur ser jag alla främmande nycklar till en tabell eller kolumn?