sql >> Database teknologi >  >> RDS >> Oracle

ADD_MONTHS() Funktion i Oracle

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:

  1. 3 måder at adskille år, måned og dag fra en dato i MariaDB

  2. vælg fra en tabel, indsæt i en anden tabel oracle sql-forespørgsel

  3. Sådan returneres forespørgselsresultater som en kommasepareret liste i PostgreSQL

  4. SYSDATE() vs NOW() i MySQL:Hvad er forskellen?