V databázi Oracle, ADD_MONTHS() funkce přidá daný počet měsíců k datu a vrátí výsledek.
Syntaxe
Syntaxe vypadá takto:
ADD_MONTHS(date, integer)
Kde date může být hodnota datetime nebo jakákoliv hodnota, kterou lze implicitně převést na DATE .
integer argument může být celé číslo nebo jakákoli hodnota, kterou lze implicitně převést na celé číslo.
Návratový typ je vždy DATE , bez ohledu na datový typ date .
Příklad
Zde je příklad:
SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL; Výsledek:
01/APR/20
Tento příklad zobrazuje datum na základě hodnoty NLS_DATE_FORMAT mého systému parametr (který je aktuálně DD/MON/RR ). Tento parametr můžeme buď změnit, nebo použít funkci jako TO_CHAR() vrátit výsledek v jiném formátu.
Příklad:
SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL; Výsledek:
2020-04-01
Odečíst měsíce
Chcete-li od data odečíst měsíce, použijte pro druhý argument zápornou hodnotu.
Příklad:
SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL; Výsledek:
01/OCT/19
Předávání různých formátů data
Datum může být poskytnuto v různých formátech, pokud jde o datum:
SELECT ADD_MONTHS('01 Jan 2020', 3)
FROM DUAL; Výsledek:
01/APR/20
Ale předání takového, který nelze vyřešit, vede k chybě:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL; Výsledek:
Error starting at line : 1 in command -
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL
Error report -
ORA-01858: a non-numeric character was found where a numeric was expected
To však může záviset na hodnotě NLS_DATE_FORMAT parametr. Pokud změníme tento parametr:
ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT'; Výsledek:
VALUE ____________ Mon DD RR
A pak spusťte dotaz znovu:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL; Výsledek:
Apr 01 20
Chyba se nám již nezobrazuje.
Nulové argumenty
Předání data null vrátí null :
SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL; Výsledek:
null
Ale předání hodnoty null pro druhý argument vede k chybě:
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL; Výsledek:
Error starting at line : 1 in command -
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL
Error report -
ORA-01843: not a valid month
Všimněte si, že standardně SQLcl a SQL*Plus vrátí prázdné místo vždy, když null dochází v důsledku SQL SELECT prohlášení.
Můžete však použít SET NULL určit jiný řetězec, který má být vrácen. Ve výše uvedeném příkladu jsem uvedl, že řetězec null by měl být vrácen.
Neplatný počet argumentů
Předání neplatného počtu argumentů má za následek chybu:
SELECT ADD_MONTHS(3)
FROM DUAL; Výsledek:
Error starting at line : 1 in command - SELECT ADD_MONTHS(3) 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: