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

ADD_MONTHS() Funzione in Oracle

In Oracle Database, il ADD_MONTHS() La funzione aggiunge un determinato numero di mesi a una data e restituisce il risultato.

Sintassi

La sintassi è questa:

ADD_MONTHS(date, integer)

Dove date può essere un valore datetime o qualsiasi valore che può essere convertito implicitamente in DATE .

Il integer argomento può essere un numero intero o qualsiasi valore che può essere convertito in modo implicito in un numero intero.

Il tipo di restituzione è sempre DATE , indipendentemente dal tipo di dati di date .

Esempio

Ecco un esempio:

SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;

Risultato:

01/APR/20

Questo esempio mostra la data in base al valore del NLS_DATE_FORMAT del mio sistema parametro (che è attualmente DD/MON/RR ). Possiamo modificare questo parametro o utilizzare una funzione come TO_CHAR() per restituire il risultato in un formato diverso.

Esempio:

SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;

Risultato:

2020-04-01

Sottrai mesi

Per sottrarre mesi da una data, utilizza un valore negativo per il secondo argomento.

Esempio:

SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;

Risultato:

01/OCT/19

Passaggio di vari formati di data

La data può essere fornita in vari formati, purché si risolva in una data:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Risultato:

01/APR/20

Ma il passaggio di uno che non può essere risolto genera un errore:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Risultato:

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

Tuttavia, questo può dipendere dal valore di NLS_DATE_FORMAT parametro. Se cambiamo questo parametro:

ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';

Risultato:

       VALUE 
____________ 
Mon DD RR   

E quindi esegui di nuovo la query:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Risultato:

Apr 01 20

Non riceviamo più l'errore.

Argomenti nulli

Superamento di una data di null restituisce null :

SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;

Risultato:

null

Ma passare null per il secondo argomento genera un errore:

SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL
Error report -
ORA-01843: not a valid month

Nota che per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null si verifica come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Nell'esempio sopra, ho specificato che la stringa null deve essere restituito.

Numero di argomenti non valido

Il passaggio di un numero di argomenti non valido genera un errore:

SELECT ADD_MONTHS(3)
FROM DUAL;

Risultato:

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: