En Oracle Database, el ADD_MONTHS()
La función agrega un número determinado de meses a una fecha y devuelve el resultado.
Sintaxis
La sintaxis es así:
ADD_MONTHS(date, integer)
Donde date
puede ser un valor de fecha y hora o cualquier valor que se pueda convertir implícitamente a DATE
.
El integer
el argumento puede ser un número entero o cualquier valor que se pueda convertir implícitamente en un número entero.
El tipo de devolución siempre es DATE
, independientemente del tipo de datos de date
.
Ejemplo
He aquí un ejemplo:
SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;
Resultado:
01/APR/20
Este ejemplo muestra la fecha según el valor del NLS_DATE_FORMAT
de mi sistema. parámetro (que actualmente es DD/MON/RR
). Podemos cambiar este parámetro o usar una función como TO_CHAR()
para devolver el resultado en un formato diferente.
Ejemplo:
SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;
Resultado:
2020-04-01
Restar meses
Para restar meses de una fecha, use un valor negativo para el segundo argumento.
Ejemplo:
SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;
Resultado:
01/OCT/19
Pasar varios formatos de fecha
La fecha se puede proporcionar en varios formatos, siempre que se resuelva en una fecha:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Resultado:
01/APR/20
Pero pasar uno que no se puede resolver da como resultado un error:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Resultado:
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
Sin embargo, esto puede depender del valor de NLS_DATE_FORMAT
parámetro. Si cambiamos este parámetro:
ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Resultado:
VALUE ____________ Mon DD RR
Y luego ejecuta la consulta de nuevo:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Resultado:
Apr 01 20
Ya no obtenemos el error.
Argumentos nulos
Pasar una fecha de null
devuelve null
:
SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;
Resultado:
null
Pero pasar nulo para el segundo argumento da como resultado un error:
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT ADD_MONTHS('2020-01-01', null) FROM DUAL Error report - ORA-01843: not a valid month
Tenga en cuenta que, de forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null
ocurre como resultado de un SQL SELECT
declaración.
Sin embargo, puede usar SET NULL
para especificar una cadena diferente a devolver. En el ejemplo anterior, especifiqué que la cadena null
debe ser devuelto.
Número de argumentos no válido
Pasar un número no válido de argumentos da como resultado un error:
SELECT ADD_MONTHS(3)
FROM DUAL;
Resultado:
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: