Función ADD_MONTHS
ADD_MONTHS agrega la cantidad de meses especificada a una expresión o un valor de fecha o marca temporal. La función DATEADD ofrece una funcionalidad similar.
Sintaxis
ADD_MONTHS( {date | timestamp}, integer)
Argumentos
- date | timestamp
-
Una columna de tipo de datos
DATE
oTIMESTAMP
, o una expresión que toma implícitamente el valor de un tipoDATE
oTIMESTAMP
. Si la fecha es el último día del mes, o si el mes resultante es más corto, la función devuelve el último día del mes en el resultado. Para otras fechas, el resultado tiene el mismo número de día que la expresión de fecha. - integer
-
Un valor de tipo de datos
INTEGER
. Use un número negativo para restar meses de las fechas.
Tipo de retorno
TIMESTAMP
Ejemplos
La siguiente consulta utiliza la función ADD_MONTHS dentro de una función TRUNC. La función TRUNC quita la hora del día del resultado de ADD_MONTHS. La función ADD_MONTHS agrega 12 meses a cada valor de la columna CALDATE. Los valores de la columna CALDATE son fechas.
select distinct trunc(add_months(caldate, 12)) as calplus12, trunc(caldate) as cal from date order by 1 asc;
calplus12 | cal ------------+------------ 2009-01-01 | 2008-01-01 2009-01-02 | 2008-01-02 2009-01-03 | 2008-01-03 ... (365 rows)
En el siguiente ejemplo se utiliza la función ADD_MONTHS para sumar 1 mes a un valor timestamp.
select add_months('2008-01-01 05:07:30', 1);
add_months --------------------- 2008-02-01 05:07:30
En los ejemplos a continuación, se demuestra el comportamiento resultante cuando la función ADD_MONTHS opera sobre fechas con meses que tienen diferente cantidad de días. En este ejemplo se muestra cómo la función controla sumar 1 mes al 31 de marzo y sumar 1 mes al 30 de abril. Abril tiene 30 días, por lo que sumar 1 mes al 31 de marzo da como resultado el 30 de abril. Mayo tiene 31 días, por lo que sumar 1 mes al 30 de abril da como resultado el 31 de mayo.
select add_months('2008-03-31',1);
add_months --------------------- 2008-04-30 00:00:00
select add_months('2008-04-30',1);
add_months --------------------- 2008-05-31 00:00:00