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: