Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Función DATEADD
Aumenta un valor de DATE, TIME, TIMETZ o TIMESTAMP según un intervalo especificado.
Sintaxis
DATEADD( datepart, interval, {date|time|timetz|timestamp} )
Argumentos
- datepart
-
La parte de la fecha (año, mes, día u hora, por ejemplo) sobre la que opera la función. Para obtener más información, consulte Partes de fecha para funciones de fecha o marca temporal.
- interval
-
Un número entero que especifica el intervalo (cantidad de días, por ejemplo) por agregar a la expresión objetivo. Un número entero negativo resta al intervalo.
- date|time|timetz|timestamp
-
Una columna DATE, TIME, TIMETZ o TIMESTAMP o una expresión que, de forma implícita, se convierte a una DATE, TIME, TIMETZ o TIMESTAMP. La expresión de DATE, TIME, TIMETZ o TIMESTAMP debe contener la parte de fecha especificada.
Tipo de retorno
TIMESTAMP, TIME o TIMETZ según el tipo de datos de entrada.
Ejemplos con una columna DATE
En el siguiente ejemplo, se agregan 30 días a cada fecha en noviembre que se encuentra en la tabla de DATE.
select dateadd(day,30,caldate) as novplus30 from date where month='NOV' order by dateid; novplus30 --------------------- 2008-12-01 00:00:00 2008-12-02 00:00:00 2008-12-03 00:00:00 ... (30 rows)
En el siguiente ejemplo, se agregan 18 meses a un valor de fecha literal.
select dateadd(month,18,'2008-02-28'); date_add --------------------- 2009-08-28 00:00:00 (1 row)
El nombre predeterminado de la columna para una función DATEADD es DATE_ADD. La marca temporal predeterminada para un valor de fecha es 00:00:00
.
En el siguiente ejemplo, se agregan 30 minutos a un valor de fecha que no especifica una marca temporal.
select dateadd(m,30,'2008-02-28'); date_add --------------------- 2008-02-28 00:30:00 (1 row)
Puede nombrar las partes de la fecha de manera completa o abreviada. En este caso, m representa a los minutos y no a lo meses.
Ejemplos con una columna TIME
La siguiente tabla de ejemplo, TIME_TEST, tiene una columna TIME_VAL (tipo TIME) con tres valores insertados.
select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00
En el siguiente ejemplo, se agregan 5 minutos a cada TIME_VAL de la tabla TIME_TEST.
select dateadd(minute,5,time_val) as minplus5 from time_test; minplus5 --------------- 20:05:00 00:05:00.5550 01:03:00
En el siguiente ejemplo, se agregan 8 horas a un valor de fecha literal.
select dateadd(hour, 8, time '13:24:55'); date_add --------------- 21:24:55
El siguiente ejemplo muestra cuando una hora supera las 24:00:00 o cuando es antes de las 00:00:00.
select dateadd(hour, 12, time '13:24:55'); date_add --------------- 01:24:55
Ejemplos con una columna TIMETZ
Los valores de salida en estos ejemplos están en formato UTC, que es la zona horaria predeterminada.
La siguiente tabla de ejemplo, TIMETZ_TEST, tiene una columna TIMETZ_VAL (tipo TIMETZ) con tres valores insertados.
select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00
En el siguiente ejemplo, se agregan 5 minutos a cada TIMETZ_VAL de la tabla TIMETZ_TEST.
select dateadd(minute,5,timetz_val) as minplus5_tz from timetz_test; minplus5_tz --------------- 04:05:00+00 00:05:00.5550+00 06:03:00+00
En el siguiente ejemplo, se agregan 2 horas a un valor de timetz literal.
select dateadd(hour, 2, timetz '13:24:55 PST'); date_add --------------- 23:24:55+00
Ejemplos con una columna TIMESTAMP
Los valores de salida en estos ejemplos están en formato UTC, que es la zona horaria predeterminada.
La siguiente tabla de ejemplo, TIMESTAMP_TEST tiene una columna TIMESTAMP_VAL (tipo TIMESTAMP) con tres valores insertados.
SELECT timestamp_val FROM timestamp_test; timestamp_val ------------------ 1988-05-15 10:23:31 2021-03-18 17:20:41 2023-06-02 18:11:12
El siguiente ejemplo agrega 20 años solo a los valores TIMESTAMP_VAL en TIMESTAMP_TEST anteriores al año 2000.
SELECT dateadd(year,20,timestamp_val) FROM timestamp_test WHERE timestamp_val < to_timestamp('2000-01-01 00:00:00', 'YYYY-MM-DD HH:MI:SS'); date_add --------------- 2008-05-15 10:23:31
En el siguiente ejemplo se agregan 5 segundos a un valor de marca temporal literal escrito sin un indicador de segundos.
SELECT dateadd(second, 5, timestamp '2001-06-06'); date_add --------------- 2001-06-06 00:00:05
Notas de uso
Las funciones DATEADD(month, ...) y ADD_MONTHS administran las fechas que caen en fin de mes de manera diferente:
-
ADD_MONTHS: si la fecha que se agrega es el último día del mes, el resultado es siempre el último día del mes en el resultado, sin importar su longitud. Por ejemplo, 30 de abril + 1 mes es 31 de mayo.
select add_months('2008-04-30',1); add_months --------------------- 2008-05-31 00:00:00 (1 row)
-
DATEADD: si en la fecha que se agrega hay menos días que en el mes del resultado, el resultado será el día correspondiente del mes del resultado, no el último día de ese mes. Por ejemplo, 30 de abril + 1 mes es 30 de mayo.
select dateadd(month,1,'2008-04-30'); date_add --------------------- 2008-05-30 00:00:00 (1 row)
La función DATEADD administra la fecha 02-29 de año bisiesto de manera diferente con dateadd (month, 12,…) o dateadd (year, 1, …).
select dateadd(month,12,'2016-02-29'); date_add --------------------- 2017-02-28 00:00:00 select dateadd(year, 1, '2016-02-29'); date_add --------------------- 2017-03-01 00:00:00