Fechas · fecha y hora actual

CURRENT_TIMESTAMP

Obtén la fecha y la hora del contexto de ejecución y evita asumir que todos los motores devuelven el mismo tipo, zona horaria o momento de referencia.

Lectura: 5–7 minEjemplos comprobadosCompatibilidad por motor
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

SQL
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

SQL
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:

Ejemplo
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

!
Comparar timestamps guardados en una zona con “ahora” interpretado en otra

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.

!
Usar CURRENT_TIMESTAMP cuando solo necesitas una fecha

Si la hora no forma parte de la regla, CURRENT_DATE expresa mejor la intención.

Práctica: marca eventos ya ocurridos

Básica · comparación temporal

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_TIMESTAMP incluye fecha y hora; CURRENT_DATE no.
  • 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.

Conceptos relacionados

Fuentes técnicas consultadas