Referencia de funciones

INTERVAL

Construcción SQL

Suma o resta un intervalo de tiempo a una fecha.

MySQL 8.4
date {+ | -} INTERVAL expr unit
  • { a | b }una de las opciones
date
Fecha o fecha y hora de origen
DATE
+ | -
Sumar o restar el intervalo
+-
INTERVAL expr unit
Intervalo, por ejemplo INTERVAL 7 DAY
expr
Número de unidades; con una unidad compuesta, una cadena, por ejemplo '1:30'
unit
Unidad del intervalo
Palabra clave
MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECONDMINUTE_MICROSECONDMINUTE_SECONDHOUR_MICROSECONDHOUR_SECONDHOUR_MINUTEDAY_MICROSECONDDAY_SECONDDAY_MINUTEDAY_HOURYEAR_MONTH

Valor devuelto

Fecha si a una fecha se suman días o unidades mayores; si no, fecha y hora; si el día no existe en el mes, se usa el último día del mes

Ejemplos

Un mes al 31 de enero

MySQL 8.4
SELECT '2024-01-31' + INTERVAL 1 MONTH AS next_month;
next_month
2024-02-29

Plazo de pago en 30 días

MySQL 8.4
SELECT payment_id,
	date,
	date + INTERVAL 30 DAY AS due_date
FROM Payments
LIMIT 5;
payment_iddatedue_date
12005-02-122005-03-14
22005-03-232005-04-22
32005-05-142005-06-13
42005-07-222005-08-21
52005-07-262005-08-25

Intervalo a la izquierda y resta

MySQL 8.4
SELECT INTERVAL 1 DAY + '2024-12-31' AS new_year,
	'2024-03-08 14:30:00' - INTERVAL '1:30' HOUR_MINUTE AS earlier;
new_yearearlier
2025-01-012024-03-08 13:00:00

Detalles

INTERVAL forma parte de una expresión con una fecha, no es un valor por sí mismo: SELECT INTERVAL 1 DAY es un error. date + INTERVAL 7 DAY equivale a DATE_ADD(date, INTERVAL 7 DAY), y el intervalo también puede ir a la izquierda del más. Lo que no puedes es restar una fecha a un intervalo.

Sin intervalo, un número no se suma a la fecha, sino al número AAAAMMDD: CURDATE() + 1 no es mañana. En PostgreSQL, INTERVAL es un tipo de dato y el valor se escribe como cadena: date + INTERVAL '7 days'.

Unidad compuestaFormato de la cadena exprEjemplo
SECOND_MICROSECONDsegundos.microsegundos'10.000500'
MINUTE_MICROSECONDminutos:segundos.microsegundos'5:10.000500'
MINUTE_SECONDminutos:segundos'5:10'
HOUR_MICROSECONDhoras:minutos:segundos.microsegundos'2:05:10.000500'
HOUR_SECONDhoras:minutos:segundos'2:05:10'
HOUR_MINUTEhoras:minutos'1:30'
DAY_MICROSECONDdías horas:minutos:segundos.microsegundos'1 2:05:10.000500'
DAY_SECONDdías horas:minutos:segundos'1 2:05:10'
DAY_MINUTEdías horas:minutos'1 2:05'
DAY_HOURdías horas'1 12'
YEAR_MONTHaños-meses'1-6'

Véase también

Dónde aprenderlo