sql >> Databasteknik >  >> RDS >> Oracle

ADD_MONTHS() Funktion i Oracle

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:

  1. Snabbtips – Snabba upp en långsam återställning från transaktionsloggen

  2. Skapa en trigger i Oracle Express

  3. Lagra filer i SQL Server

  4. SYSDATETIMEOFFSET() Exempel i SQL Server (T-SQL)