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: