MySQL: Obtener la hora actual – NOW() vs SYSDATE() vs CURTIME()

1. Introducción

Obtener la hora actual en MySQL es un aspecto muy importante de la gestión de bases de datos.
Por ejemplo, necesita obtener la hora actual en situaciones como las siguientes.

  • Registrar automáticamente la marca de tiempo de creación al insertar datos (por ejemplo, marca de tiempo para el registro de un nuevo usuario)
  • Registrar los tiempos de inicio de sesión de los usuarios (por ejemplo, gestionar el historial de inicio de sesión)
  • Recuperar datos para un período específico (por ejemplo, obtener el historial de pedidos de las últimas 24 horas)
  • Registrar eventos de ejecución del sistema (por ejemplo, gestionar registros de errores y registros de eventos)

Por lo tanto, obtener correctamente la “hora actual” para la gestión de datos y el registro es esencial para las operaciones de la base de datos.
En este artículo, explicaremos a fondo cómo obtener la hora actual en MySQL, incluyendo consultas SQL reales.
También cubriremos las diferencias entre las funciones más utilizadas, las distinciones de uso apropiado y ejemplos prácticos de consultas, lo que lo hace útil tanto para principiantes como para usuarios intermedios.

2. Funciones de MySQL para Obtener la Hora Actual (Tabla Comparativa)

MySQL ofrece varias funciones para obtener la hora actual.
Elegir la función adecuada según el caso de uso es importante, pero muchas personas encuentran difíciles de entender las diferencias.
En esta sección, comparamos las funciones principales para obtener la hora actual en MySQL en una tabla y explicamos cada una de sus características en detalle.

2.1 Tabla Comparativa de Funciones de Obtención de Hora en MySQL

Nombre de la Función

Información Recuperada

Format

Características

NOW()

Fecha y hora actuales

YYYY-MM-DD HH:MM:SS

Los más usados

SYSDATE()

Fecha y hora de ejecución

YYYY-MM-DD HH:MM:SS

A diferencia de NOW(), cambia con cada ejecución

CURTIME()

Hora actual

HH:MM:SS

Solo hora, no fecha

CURRENT_TIME()

Hora actual

HH:MM:SS

Same as CURTIME()

CURRENT_TIMESTAMP()

Fecha y hora actuales

YYYY-MM-DD HH:MM:SS

Casi igual a NOW()

UTC_TIMESTAMP()

Fecha y hora UTC actuales

YYYY-MM-DD HH:MM:SS

Zona horaria fijada a UTC

Al observar la tabla anterior, la mayoría de las funciones recuperan la “fecha y hora actuales” o la “hora actual”, pero la función que debe elegir varía según el propósito.

2.2 Visión General y Características de Cada Función

NOW() Function

  • La función común para obtener la fecha y hora actuales
  • Devuelve la hora en que se inició la consulta SQL
  • Se usa a menudo para obtener marcas de tiempo al insertar o actualizar datos
SELECT NOW();

Resultado de ejemplo

2025-02-14 15:30:45

SYSDATE() Function

  • Obtiene la hora actual en el momento en que se ejecuta la consulta
  • La diferencia con NOW() es que SYSDATE() devuelve una hora diferente en cada ejecución (incluso dentro de una transacción)
SELECT SYSDATE();

Resultado de ejemplo

2025-02-14 15:30:47

CURTIME() Function

  • Recupera solo la hora (HH:MM:SS)
  • Se usa cuando no se necesita la fecha
SELECT CURTIME();

Resultado de ejemplo

15:30:45

CURRENT_TIME() Function

  • Se comporta igual que CURTIME()
  • El nombre de la función cumple con el estándar SQL
SELECT CURRENT_TIME();

Resultado de ejemplo

15:30:45

CURRENT_TIMESTAMP() Function

  • Mismo comportamiento que NOW()
  • Se puede especificar como valor DEFAULT para una columna de tabla (más adecuado que NOW())
SELECT CURRENT_TIMESTAMP();

Resultado de ejemplo

2025-02-14 15:30:45

Establecer como valor predeterminado al crear una tabla:

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

UTC_TIMESTAMP() Function

  • Recupera la hora UTC actual (Tiempo Universal Coordinado)
  • Proporciona una hora consistente independientemente de la zona horaria del servidor
SELECT UTC_TIMESTAMP();

Resultado de ejemplo

2025-02-14 06:30:45

2.3 ¿Qué Función Deberías Usar?

Caso de uso

Función recomendada

Recuperar la fecha y hora actualNOW()
Obtén un tiempo distinto para cada transacciónSYSDATE()
Solo necesita la hora actual (HH:MM:SS)CURTIME() or CURRENT_TIME()
Establecer como valor predeterminado de la tablaCURRENT_TIMESTAMP()
Obtener UTC (Tiempo Universal Coordinado)UTC_TIMESTAMP()

En general, para la obtención ordinaria de fecha y hora, usar NOW() funciona bien!
Sin embargo, elegir la función adecuada para su caso de uso permite una manipulación de datos más flexible.

3. Detalles de la Función NOW()

La función NOW() de MySQL es la función más común para obtener la fecha y hora actuales (año-mes-día más hora).
Se utiliza en una amplia gama de escenarios, como al almacenar datos en la base de datos o al recuperar datos para un período específico.

3.1 Uso Básico de la Función NOW()

Sintaxis de NOW()

SELECT NOW();

Resultado de Ejemplo

2025-02-14 15:30:45
  • Salidas en el formato YYYY-MM-DD HH:MM:SS (año-mes-día hora:minuto:segundo).
  • La hora se recupera según la zona horaria predeterminada de MySQL.

3.2 Usos de la función NOW()

① Registrar la hora actual al insertar datos

Al insertar datos en la base de datos, puedes usar NOW() para registrar la marca de tiempo de creación.

INSERT INTO users (name, created_at) VALUES ('Sato', NOW());

② Registrar la hora actual al actualizar datos

UPDATE users SET last_login = NOW() WHERE id = 1;

③ Recuperar datos para un período específico

SELECT * FROM orders WHERE order_date >= NOW() - INTERVAL 1 DAY;
  • Especificar INTERVAL 1 DAY recupera datos de los últimos 1 día.

3.3 Tipo de retorno de la función NOW() y cambio de formato

Tipo de dato de retorno de NOW()

    • DATETIME

tipo (YYYY-MM-DD HH:MM:SS)

  • También puede tratarse como una cadena
SELECT NOW(), typeof(NOW());

Cómo cambiar el formato

SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i:%s') AS formatted_time;

Resultado

2025/02/14 15:30:45

3.4 Diferencias entre la función NOW() y la función SYSDATE()

Nombre de la función

Tiempo de recuperación

Características

NOW()

Al inicio de la consulta

Obtiene una marca de tiempo fija en el momento en que se ejecuta la consulta.

SYSDATE()

Durante la ejecución de la consulta

Obtiene una hora diferente para cada> cada ejecución de la consulta

SELECT NOW(), SLEEP(3), NOW();
SELECT SYSDATE(), SLEEP(3), SYSDATE();

Resultado de ejemplo

NOW()        | SLEEP(3) | NOW()
2025-02-14 15:30:45 | wait 3 seconds | 2025-02-14 15:30:45
SYSDATE()    | SLEEP(3) | SYSDATE()
2025-02-14 15:30:45 | wait 3 seconds | 2025-02-14 15:30:48

🚨 Al tratar con transacciones, se recomienda NOW() porque proporciona consistencia!

3.5 Limitaciones y consideraciones de la función NOW()

① Depende de la zona horaria

SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Tokyo');>

② Utiliza CURRENT_TIMESTAMP como valor predeterminado para las tablas

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

3.6 Resumen de la función NOW()

  • NOW() es la función más común en MySQL para obtener la fecha y hora actuales.
  • Puede usarse para diversos propósitos como insertar, actualizar y recuperar datos.
  • Si necesitas una marca de tiempo consistente dentro de una transacción, usa NOW().
  • SYSDATE() recupera una hora diferente en cada ejecución, así que úsala cuando se necesite una marca de tiempo exacta de ejecución.
  • Para obtener la hora en una zona horaria diferente, usa CONVERT_TZ().

📌 Conclusión: Si quieres obtener la fecha y hora actuales en MySQL, usar NOW() es generalmente la mejor opción!

4. Características de la función SYSDATE()

SYSDATE() es una forma de obtener la fecha y hora actuales en MySQL, pero se comporta de manera diferente a NOW().
En esta sección, explicaremos en detalle el uso básico de SYSDATE(), sus diferencias con NOW(), y consideraciones importantes.

4.1 ¿Qué es la función SYSDATE()?

SYSDATE() es una función que devuelve la hora en la que se ejecuta la consulta.
A diferencia de NOW(), tiene la característica de recuperar una hora diferente cada vez que se ejecuta.

Sintaxis de SYSDATE()

SELECT SYSDATE();

Resultado de ejemplo

2025-02-14 16:00:45
  • Devuelto en formato YYYY-MM-DD HH:MM:SS
  • Se obtiene el momento exacto en que se ejecuta la consulta

4.2 Diferencias entre SYSDATE() y NOW()