Contenido de esta guía
Qué devuelve CURRENT_TIMESTAMP
CURRENT_TIMESTAMP representa la fecha y la hora actuales según el contexto temporal del motor de base de datos. Es útil para registrar cuándo ocurre una operación, comparar eventos con “ahora” o definir valores por defecto.
No lo confundas con CURRENT_DATE: este último representa una fecha sin la parte horaria. Tampoco asumas que CURRENT_TIMESTAMP implica la misma zona horaria o el mismo tipo de dato en todos los motores.
Sintaxis básica
SELECT CURRENT_TIMESTAMP AS ahora;El valor cambia con el momento de ejecución. Por eso un ejemplo editorial no debe fijar una hora concreta y presentarla como si fuera universal.
Ejemplo guiado: comparar un vencimiento con el momento actual
SELECT id, titulo, vence_en
FROM tareas
WHERE vence_en < CURRENT_TIMESTAMP
ORDER BY vence_en;La condición devuelve las tareas cuyo instante de vencimiento es anterior al valor temporal que el motor considera actual. Para que el resultado sea correcto en producción, la columna y la sesión deben usar una estrategia de zona horaria coherente.
Usarlo como valor por defecto
Un caso frecuente consiste en registrar automáticamente el momento de inserción. La sintaxis exacta y el tipo recomendado dependen del motor, pero esta forma es válida en SQLite para una columna de texto temporal y también aparece como patrón en otros motores:
CREATE TABLE eventos (
id INTEGER PRIMARY KEY,
nombre TEXT NOT NULL,
creado_en TEXT DEFAULT CURRENT_TIMESTAMP
);El tipo importa. En una base real, elegí el tipo temporal adecuado para el motor en lugar de copiar TEXT como regla general. El ejemplo anterior está pensado para ilustrar el comportamiento en SQLite.
Zona horaria y momento de referencia
Las diferencias entre motores son relevantes. SQLite documenta CURRENT_TIMESTAMP como texto UTC con formato YYYY-MM-DD HH:MM:SS en valores por defecto. SQL Server devuelve un datetime basado en la hora del sistema de la instancia y sin offset de zona. PostgreSQL ofrece valores de fecha/hora actuales con semántica propia de la transacción y la sesión.
Si necesitas UTC, zona local o un offset explícito, documenta esa decisión y utiliza la función o el tipo correspondiente al motor. No deduzcas una zona horaria a partir del texto mostrado.
Errores frecuentes
La consulta puede ser sintácticamente correcta y aun así clasificar mal eventos cercanos al cambio de día u horario. Normaliza la estrategia temporal.
Si la hora no forma parte de la regla, CURRENT_DATE expresa mejor la intención.
Práctica: marca eventos ya ocurridos
Devuelve únicamente eventos anteriores al momento actual
Supón una tabla eventos(id, nombre, ocurre_en). Devuelve nombre y ocurre_en para los eventos que ya ocurrieron, del más reciente al más antiguo.
Pista
Compara ocurre_en con CURRENT_TIMESTAMP y ordena de forma descendente.
Ver solución explicada
SELECT nombre, ocurre_en
FROM eventos
WHERE ocurre_en < CURRENT_TIMESTAMP
ORDER BY ocurre_en DESC;La condición separa los eventos pasados. El orden descendente coloca primero el que ocurrió más recientemente.
Compatibilidad entre motores
CURRENT_TIMESTAMP está ampliamente disponible, pero el tipo de retorno, la precisión, la zona horaria y el instante exacto usado como referencia no son idénticos. PostgreSQL, MySQL, SQLite y SQL Server documentan comportamientos propios; verifica el motor cuando esas diferencias afecten a la regla de negocio.
Qué debes recordar
CURRENT_TIMESTAMPincluye fecha y hora;CURRENT_DATEno.- No supongas una zona horaria por el nombre de la función.
- Para auditoría y vencimientos, define una estrategia temporal coherente en toda la aplicación.