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: