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: