Contenido de esta guía
Respuesta rápida
No existe una única sintaxis portable para sumar o restar intervalos temporales en todos los motores. La intención es la misma, pero cada dialecto expresa el desplazamiento de forma diferente.
| Motor | Sumar 30 días |
|---|---|
| PostgreSQL | fecha + INTERVAL '30 days' |
| MySQL | DATE_ADD(fecha, INTERVAL 30 DAY) |
| SQL Server | DATEADD(day, 30, fecha) |
| SQLite | date(fecha, '+30 days') |
Elige la variante de tu motor y comprueba el tipo devuelto. Sumar días, meses y horas no siempre tiene las mismas reglas en los límites de mes o alrededor de cambios de zona horaria.
Modelo mental: desplaza un valor temporal con una unidad explícita
«Sumar 30» a una fecha no expresa por sí solo si hablas de días, horas o meses. Una operación temporal debe dejar clara la unidad y el valor de partida. Eso evita confundir aritmética de fechas con aritmética numérica.
Para plazos de negocio, pregunta además si necesitas días naturales, meses de calendario o una duración exacta de horas. No son intercambiables en todos los casos.
Ejemplo comprobado en SQLite: fecha de revisión 30 días después
SELECT
id,
nombre,
fecha_registro,
date(fecha_registro, '+30 days') AS revision
FROM clientes
ORDER BY id
LIMIT 5;| id | nombre | fecha_registro | revision |
|---|---|---|---|
| 1 | Ana Torres | 2025-01-08 | 2025-02-07 |
| 2 | Luis Martín | 2025-01-12 | 2025-02-11 |
| 3 | Marta Ruiz | 2025-02-01 | 2025-03-03 |
| 4 | Diego López | 2025-02-14 | 2025-03-16 |
| 5 | Sara Gómez | 2025-03-03 | 2025-04-02 |
El modificador '+30 days' se aplica al valor de fecha_registro. Para restar, usa un desplazamiento negativo como '-7 days'.
La misma intención en PostgreSQL, MySQL y SQL Server
PostgreSQL
SELECT fecha_registro + INTERVAL '30 days' AS revision
FROM clientes;PostgreSQL define tipos interval y operadores temporales. Al sumar un intervalo con hora a un date, el resultado puede convertirse en timestamp.
MySQL
SELECT DATE_ADD(fecha_registro, INTERVAL 30 DAY) AS revision
FROM clientes;
SELECT DATE_SUB(fecha_registro, INTERVAL 7 DAY) AS semana_anterior
FROM clientes;SQL Server
SELECT DATEADD(day, 30, fecha_registro) AS revision
FROM clientes;
SELECT DATEADD(day, -7, fecha_registro) AS semana_anterior
FROM clientes;No copies una variante en otro motor esperando que sea equivalente. El nombre de la función, la forma del intervalo y los tipos temporales son parte del dialecto.
Meses y años: el borde del calendario importa
Un mes no tiene una cantidad fija de días. Por eso «31 de enero + 1 mes» obliga al motor a resolver una fecha que quizá no exista en febrero. PostgreSQL y MySQL documentan reglas de ajuste al final del mes; SQLite expone modificadores y opciones como ceiling/floor para resolver ambigüedades en desplazamientos por meses o años.
Para plazos legales o de facturación, no asumas la regla. Decide qué significa «un mes después» en tu negocio, crea casos de prueba para fin de mes y años bisiestos, y documenta el comportamiento del motor.
Días de calendario y 24 horas pueden diferir
Con timestamps que incluyen zona horaria, un «día» de calendario y 24 horas exactas pueden producir horas locales diferentes al atravesar un cambio de horario estacional. PostgreSQL lo documenta explícitamente para timestamp with time zone. Si tu aplicación opera con zonas horarias, separa el requisito de calendario del requisito de duración.
Guardar fechas ambiguas como texto y luego hacer aritmética
Un texto como 03/04/2026 puede interpretarse de varias formas. Usa tipos temporales reales cuando el motor los ofrezca o formatos inequívocos en SQLite, y valida la zona horaria cuando forme parte del significado.
Práctica: calcula una fecha de seguimiento
Añade 14 días a la fecha de cada pedido
En SQLite, devuelve id, fecha y una columna seguimiento que sea 14 días posterior. Muestra los cinco primeros pedidos por id.
date().'+14 days'.id y limita a cinco filas.Solución razonada
SELECT
id,
fecha,
date(fecha, '+14 days') AS seguimiento
FROM pedidos
ORDER BY id
LIMIT 5;La función parte de la fecha almacenada y aplica el desplazamiento. En otro motor, conserva la intención y cambia la sintaxis por la variante documentada.
Qué debes recordar
- La aritmética temporal necesita una unidad explícita.
- PostgreSQL, MySQL, SQL Server y SQLite expresan la operación de formas diferentes.
- Meses/años tienen bordes de calendario; prueba finales de mes y años bisiestos.
- Un día de calendario no siempre equivale a 24 horas cuando intervienen zonas horarias.
Conceptos relacionados
Fuentes técnicas consultadas
Las referencias oficiales se usaron para contrastar sintaxis, unidades y casos límite.