I Oracle Database, ADD_MONTHS() funktionen lägger till ett givet antal månader till ett datum och returnerar resultatet.
Syntax
Syntaxen ser ut så här:
ADD_MONTHS(date, integer)
Där date kan vara ett datetime-värde eller vilket värde som helst som implicit kan konverteras till DATE .
integer argument kan vara ett heltal eller vilket värde som helst som implicit kan konverteras till ett heltal.
Returtypen är alltid DATE , oavsett datatypen date .
Exempel
Här är ett exempel:
SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL; Resultat:
01/APR/20
Det här exemplet visar datumet baserat på värdet på mitt systems NLS_DATE_FORMAT parameter (som för närvarande är DD/MON/RR ). Vi kan antingen ändra denna parameter eller använda en funktion som TO_CHAR() för att returnera resultatet i ett annat format.
Exempel:
SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL; Resultat:
2020-04-01
Subtrahera månader
För att subtrahera månader från ett datum, använd ett negativt värde för det andra argumentet.
Exempel:
SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL; Resultat:
01/OCT/19
Passar olika datumformat
Datumet kan tillhandahållas i olika format, så länge det löser sig till ett datum:
SELECT ADD_MONTHS('01 Jan 2020', 3)
FROM DUAL; Resultat:
01/APR/20
Men att skicka en som inte kan lösas resulterar i ett fel:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL; Resultat:
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
Detta kan dock bero på värdet för NLS_DATE_FORMAT parameter. Om vi ändrar denna parameter:
ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT'; Resultat:
VALUE ____________ Mon DD RR
Och kör sedan frågan igen:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL; Resultat:
Apr 01 20
Vi får inte längre felet.
Nollargument
Passerar ett datum på null returnerar null :
SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL; Resultat:
null
Men att skicka null för det andra argumentet resulterar i ett fel:
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL; Resultat:
Error starting at line : 1 in command -
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL
Error report -
ORA-01843: not a valid month
Observera att som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.
Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. I exemplet ovan specificerade jag att strängen null bör returneras.
Ogiltigt antal argument
Att skicka ett ogiltigt antal argument resulterar i ett fel:
SELECT ADD_MONTHS(3)
FROM DUAL; Resultat:
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: