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: