I Oracle Database er ADD_MONTHS()
funktion tilføjer et givet antal måneder til en dato og returnerer resultatet.
Syntaks
Syntaksen ser sådan ud:
ADD_MONTHS(date, integer)
Hvor date
kan være en datetime-værdi eller enhver værdi, der implicit kan konverteres til DATE
.
integer
argument kan være et heltal eller en hvilken som helst værdi, der implicit kan konverteres til et heltal.
Returtypen er altid DATE
, uanset datatypen date
.
Eksempel
Her er et eksempel:
SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;
Resultat:
01/APR/20
Dette eksempel viser datoen baseret på værdien af mit systems NLS_DATE_FORMAT
parameter (som i øjeblikket er DD/MON/RR
). Vi kan enten ændre denne parameter eller bruge en funktion som TO_CHAR()
for at returnere resultatet i et andet format.
Eksempel:
SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;
Resultat:
2020-04-01
Fratræk måneder
For at trække måneder fra en dato skal du bruge en negativ værdi for det andet argument.
Eksempel:
SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;
Resultat:
01/OCT/19
Beståelse af forskellige datoformater
Datoen kan angives i forskellige formater, så længe den løses til en dato:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Resultat:
01/APR/20
Men at bestå en, der ikke kan løses, resulterer i en fejl:
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
Dette kan dog afhænge af værdien af NLS_DATE_FORMAT
parameter. Hvis vi ændrer denne 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
Og kør derefter forespørgslen igen:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Resultat:
Apr 01 20
Vi får ikke længere fejlen.
Nul-argumenter
Sender en dato på null
returnerer null
:
SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;
Resultat:
null
Men at sende null for det andet argument resulterer i en fejl:
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
Bemærk, at SQLcl og SQL*Plus som standard returnerer et tomt mellemrum, når null
opstår som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. I eksemplet ovenfor specificerede jeg, at strengen null
skal returneres.
Ugyldigt antal argumenter
Sende et ugyldigt antal argumenter resulterer i en fejl:
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: