sql >> Databáze >  >> RDS >> Oracle

Funkce MONTHS_BETWEEN() v Oracle

V databázi Oracle je to MONTHS_BETWEEN() funkce vrací počet měsíců mezi dvěma daty.

Syntaxe

Syntaxe vypadá takto:

MONTHS_BETWEEN(date1, date2)

Příklad

Zde je příklad:

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

Výsledek:

4

V tomto případě jsou mezi těmito dvěma daty přesně čtyři měsíce.

Měsíc a poslední den v měsíci jsou definovány parametrem relace NLS_CALENDAR . V části Jak zkontrolovat hodnoty parametrů NLS zjistíte, který kalendář vaše relace používá. Můj používá gregoriánský kalendář.

Zlomkové měsíce

Funkce umožňuje zlomkové měsíce. Pokud tato dvě data zahrnují různé části dne, Oracle Database vypočítá příslušnou dílčí komponentu, která se má použít.

Příklad:

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

Výsledek:

3.51612903225806451612903225806451612903

Záporné měsíce

Pokud je druhé datum pozdější než první, vrátí se záporná částka:

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

Výsledek:

-4

Data mimo rozsah

Nulová data a jiná data mimo rozsah vedou k chybě.

Příklad:

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

Výsledek:

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

Jak uvádí chybová zpráva, (celý) rok musí být mezi -4713 a +9999 a nesmí být 0 .

Porovnání data s aktuálním datem

Můžeme předat SYSDATE jako argument datetime pro porovnání data s aktuálním datem:

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

Výsledek:

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

Chybí argument

Volání MONTHS_BETWEEN() s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:

SELECT MONTHS_BETWEEN()
FROM DUAL;

Výsledek:

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. Tisk na obrazovku v souboru .sql postgres

  2. MariaDB VERSION() Vysvětleno

  3. Proč ISNUMERIC('.') vrací 1?

  4. Proč CONNECT BY LEVEL v tabulce vrací řádky navíc?