07/03/2013
En el mundo del desarrollo y la administración de bases de datos, la manipulación de fechas y horas es una tarea fundamental y recurrente. Desde registrar cuándo se creó una cuenta de usuario hasta programar eventos futuros en un juego, el tiempo es una variable crítica. MySQL, como uno de los sistemas de gestión de bases de datos más populares, nos ofrece un arsenal de funciones para trabajar con datos temporales. Una de las herramientas más potentes y precisas de este arsenal es la función TIMESTAMPADD(), diseñada para añadir o sustraer intervalos de tiempo a un valor de fecha u hora de forma sencilla y eficaz. En este artículo, desglosaremos a fondo esta función, explorando su sintaxis, sus aplicaciones prácticas y cómo puedes utilizarla para dominar el tiempo en tus proyectos.

¿Qué es un Timestamp y por qué es tan importante?
Antes de sumergirnos en la función, es crucial entender el concepto de timestamp. Un timestamp (marca de tiempo) es un tipo de dato que almacena una secuencia de caracteres que denotan la fecha y/o la hora en que ocurrió un determinado evento. En MySQL, los tipos de datos como TIMESTAMP y DATETIME son esenciales para:
- Auditoría de datos: Registrar cuándo se insertó o se modificó por última vez una fila (por ejemplo,
fecha_creacion,ultima_actualizacion). - Registro de eventos (Logging): Guardar el momento exacto en que ocurre una acción en el sistema, como el inicio de sesión de un usuario o un error del servidor.
- Programación de tareas: Definir fechas de caducidad para suscripciones, promociones o eventos dentro de una aplicación.
- Cálculos de duración: Calcular el tiempo transcurrido entre dos eventos, como la duración de una sesión de juego.
Manejar estos datos de forma precisa es vital, y es aquí donde funciones como TIMESTAMPADD() demuestran su verdadero valor.
Desglosando la Función `TIMESTAMPADD()`
La función TIMESTAMPADD() permite realizar operaciones aritméticas con fechas. Su propósito es muy claro: tomar una fecha o timestamp base, añadirle o restarle un intervalo de tiempo específico y devolver el nuevo resultado.
Sintaxis Oficial
La estructura de la función es la siguiente:
TIMESTAMPADD(unidad, intervalo, timestamp)Analicemos cada uno de sus componentes:
unidad: Es la unidad de tiempo que deseamos sumar o restar. MySQL acepta varias unidades, entre las que se incluyen:MICROSECOND,SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER(trimestre) yYEAR.intervalo: Es un valor numérico entero que representa la cantidad de unidades que se van a añadir o sustraer. Si el número es positivo, se suma tiempo. Si es negativo, se resta tiempo.timestamp: Es el valor de fecha o fecha y hora de partida al que se le aplicará la operación. Puede ser una columna de tipoDATE,DATETIME,TIMESTAMPo una cadena de texto con un formato de fecha válido.
Un detalle importante es que si el intervalo o el timestamp son NULL, la función devolverá NULL.

Ejemplos Prácticos de `TIMESTAMPADD()` en Acción
La teoría está muy bien, pero la mejor forma de entender una función es viéndola funcionar. A continuación, te mostramos varios ejemplos que cubren distintos escenarios.
Ejemplo 1: Sumando Días a una Fecha y Hora
Imagina que tienes una fecha de finalización de un proyecto y necesitas posponerla una semana (7 días). Puedes hacerlo fácilmente.
SELECT TIMESTAMPADD(DAY, 7, '2023-10-19 15:30:00') AS nueva_fecha_limite;Resultado:
+---------------------+| nueva_fecha_limite |+---------------------+| 2023-10-26 15:30:00 |+---------------------+Ejemplo 2: Restando Horas de un Timestamp
Ahora, supongamos que necesitas saber qué hora era hace 5 horas desde un momento específico. Usamos un intervalo negativo.
SELECT TIMESTAMPADD(HOUR, -5, '2023-10-20 09:00:00') AS hora_anterior;Resultado:
+---------------------+| hora_anterior |+---------------------+| 2023-10-20 04:00:00 |+---------------------+Ejemplo 3: Añadiendo Meses a una Fecha
Esta función también funciona perfectamente con el tipo de dato DATE, que solo contiene la fecha sin la hora.

SELECT TIMESTAMPADD(MONTH, 3, '2022-07-15') AS fecha_revision;Resultado:
+----------------+| fecha_revision |+----------------+| 2022-10-15 |+----------------+Tabla Comparativa de Unidades de Tiempo
Para tener una referencia rápida de las unidades que puedes utilizar con TIMESTAMPADD(), hemos preparado la siguiente tabla:
| Unidad | Descripción | Ejemplo de Uso |
|---|---|---|
| MICROSECOND | Microsegundos | TIMESTAMPADD(MICROSECOND, 100, now()) |
| SECOND | Segundos | TIMESTAMPADD(SECOND, 30, '2023-01-01 12:00:00') |
| MINUTE | Minutos | TIMESTAMPADD(MINUTE, 45, '2023-01-01 12:00:00') |
| HOUR | Horas | TIMESTAMPADD(HOUR, -2, '2023-01-01 12:00:00') |
| DAY | Días | TIMESTAMPADD(DAY, 15, '2023-01-01') |
| WEEK | Semanas | TIMESTAMPADD(WEEK, 2, '2023-01-01') |
| MONTH | Meses | TIMESTAMPADD(MONTH, 6, '2023-01-01') |
| QUARTER | Trimestres | TIMESTAMPADD(QUARTER, 1, '2023-01-01') |
| YEAR | Años | TIMESTAMPADD(YEAR, 5, '2023-01-01') |
Conceptos Relacionados y Aclaraciones Importantes
Es común que surjan dudas al trabajar con fechas. Una pregunta frecuente es: ¿Puedo convertir un intervalo a un timestamp? La respuesta es no. Un intervalo (por ejemplo, '30 días') y un timestamp (por ejemplo, '2023-11-20 10:00:00') son conceptos distintos. El intervalo representa una duración, una cantidad de tiempo, mientras que el timestamp representa un punto exacto en el tiempo. No puedes convertir una duración en un punto, pero sí puedes aplicar esa duración a un punto de partida para obtener un nuevo punto en el tiempo, que es precisamente lo que hace TIMESTAMPADD().
Otras bases de datos como PostgreSQL permiten una sintaxis más directa con el operador + (ej: '2022-07-12 12:00:00'::timestamp + '1 days'::interval), pero en MySQL, el uso de funciones dedicadas como TIMESTAMPADD() y DATE_ADD() es la forma correcta y estandarizada de realizar estas operaciones.
Preguntas Frecuentes (FAQ)
¿La función `TIMESTAMPADD()` modifica el valor original?
No. Al igual que la mayoría de las funciones de MySQL, TIMESTAMPADD() es inmutable. Esto significa que no altera el valor de entrada; en su lugar, calcula y devuelve un valor completamente nuevo. La columna o variable original permanece intacta.

¿Qué pasa si uso un número negativo en el parámetro `intervalo`?
Utilizar un número negativo equivale a realizar una resta de tiempo. TIMESTAMPADD(DAY, -10, '2023-10-30') es funcionalmente idéntico a usar la función TIMESTAMPDIFF() o DATE_SUB() para restar 10 días.
¿Puedo usar `TIMESTAMPADD()` con columnas de una tabla?
¡Por supuesto! De hecho, ese es uno de sus usos más comunes. Por ejemplo, si tienes una tabla de 'suscripciones' con una columna `fecha_inicio`, podrías calcular la fecha de vencimiento de una suscripción de 3 meses así:
SELECT id_suscripcion, fecha_inicio, TIMESTAMPADD(MONTH, 3, fecha_inicio) AS fecha_vencimiento FROM suscripciones;¿Cuál es la diferencia entre `TIMESTAMPADD()` y `DATE_ADD()`?
Ambas funciones son muy similares y a menudo se pueden usar indistintamente. La principal diferencia radica en su origen: TIMESTAMPADD() es una función del estándar ODBC, lo que la hace más compatible entre diferentes sistemas de bases de datos. DATE_ADD() es más nativa de MySQL. En la práctica, ambas realizan la misma tarea de sumar fechas e intervalos. Elige la que mejor se adapte a tus estándares de codificación o la que te resulte más legible.
Conclusión
La función TIMESTAMPADD() es una herramienta indispensable para cualquier desarrollador que trabaje con MySQL. Ofrece una forma estandarizada, clara y potente de realizar cálculos aritméticos con fechas y horas, permitiendo desde simples ajustes de días hasta complejas proyecciones en el tiempo. Al comprender su sintaxis y sus parámetros, y al practicar con los ejemplos proporcionados, estarás un paso más cerca de manipular los datos temporales en tus bases de datos con la confianza y precisión de un experto.
Si quieres conocer otros artículos parecidos a Función TIMESTAMPADD en MySQL: Guía Completa puedes visitar la categoría Juegos.
