sql >> Database >  >> RDS >> Oracle

ADD_MONTHS() Functie in Oracle

In Oracle Database, de ADD_MONTHS() functie voegt een bepaald aantal maanden toe aan een datum en geeft het resultaat terug.

Syntaxis

De syntaxis gaat als volgt:

ADD_MONTHS(date, integer)

Waar date kan een datetime-waarde zijn of een waarde die impliciet kan worden geconverteerd naar DATE .

Het integer argument kan een geheel getal zijn of een waarde die impliciet kan worden geconverteerd naar een geheel getal.

Het retourtype is altijd DATE , ongeacht het gegevenstype van date .

Voorbeeld

Hier is een voorbeeld:

SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;

Resultaat:

01/APR/20

In dit voorbeeld wordt de datum weergegeven op basis van de waarde van de NLS_DATE_FORMAT van mijn systeem parameter (die momenteel DD/MON/RR is) ). We kunnen deze parameter wijzigen of een functie gebruiken zoals TO_CHAR() om het resultaat in een ander formaat te retourneren.

Voorbeeld:

SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;

Resultaat:

2020-04-01

Maanden aftrekken

Gebruik een negatieve waarde voor het tweede argument om maanden van een datum af te trekken.

Voorbeeld:

SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;

Resultaat:

01/OCT/19

Verschillende datumnotaties passeren

De datum kan in verschillende formaten worden opgegeven, zolang het maar een datum is:

SELECT ADD_MONTHS('01 Jan 2020', 3)
FROM DUAL;

Resultaat:

01/APR/20

Maar als er een wordt doorgegeven die niet kan worden opgelost, resulteert dit in een fout:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Resultaat:

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

Dit kan echter afhangen van de waarde van de NLS_DATE_FORMAT parameter. Als we deze parameter wijzigen:

ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';

Resultaat:

       VALUE 
____________ 
Mon DD RR   

En voer de query opnieuw uit:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Resultaat:

Apr 01 20

We krijgen de fout niet meer.

Nullargumenten

Het passeren van een datum van null retourneert null :

SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;

Resultaat:

null

Maar het doorgeven van null voor het tweede argument resulteert in een fout:

SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL
Error report -
ORA-01843: not a valid month

Merk op dat SQLcl en SQL*Plus standaard een spatie retourneren wanneer null treedt op als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. In het bovenstaande voorbeeld heb ik gespecificeerd dat de string null moet worden geretourneerd.

Ongeldig aantal argumenten

Het doorgeven van een ongeldig aantal argumenten resulteert in een fout:

SELECT ADD_MONTHS(3)
FROM DUAL;

Resultaat:

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. INNER JOIN ON vs WHERE-clausule

  2. Wijzig de tijdzone-offset op een datetimeoffset-waarde in SQL Server (T-SQL)

  3. Gekoppelde serveropties bewerken met T-SQL

  4. Fix "Ten minste één van de argumenten voor COALESCE moet een expressie zijn die niet de NULL-constante is" in SQL Server