sql >> Base de Datos >  >> RDS >> Oracle

Función ADD_MONTHS() en Oracle

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: