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: