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

Funkce ADD_MONTHS() v Oracle

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:

  1. Vložit při duplicitní aktualizaci v PostgreSQL?

  2. Udělení přístupu uživatele msdb k profilu pošty databáze v SQL Server (T-SQL)

  3. MIN() vs LEAST() v MySQL:Jaký je rozdíl?

  4. Postgres case Sensitivity