Función NOW() de MySQL explicada: sintaxis, ejemplos y diferencias con SYSDATE()

1. Visión general de la función NOW() de MySQL

La función NOW() de MySQL se utiliza para obtener fácilmente la fecha y hora actuales dentro de una base de datos. Al utilizar la función NOW(), puedes obtener marcas de tiempo al insertar datos o recuperar información horaria útil para propósitos de registro. Aunque es simple, es una herramienta muy poderosa que se usa ampliamente.

Sintaxis básica de la función NOW()

La sintaxis de la función NOW() es muy simple. Puedes obtener la fecha y hora actuales con la siguiente consulta.

SELECT NOW();

El resultado de la ejecución se devuelve en el formato YYYY-MM-DD HH:MM:SS. Por ejemplo, si la fecha y hora son el 24 de octubre de 2024 a las 16:30, el resultado sería el siguiente.

2024-10-24 16:30:00

La función NOW() devuelve la fecha y hora actuales basándose en la zona horaria de la base de datos. Esto permite una gestión de tiempo coherente en todo el sistema.

Casos de uso comunes de la función NOW()

La función NOW() es especialmente útil en las siguientes situaciones.

  • Registro : Registra automáticamente la hora cuando los datos se modifican o insertan.
  • Marcas de tiempo : Se utiliza para registrar el momento de las acciones de los usuarios.
  • Filtrado dependiente del tiempo : Extrae datos que ocurrieron dentro de un período específico.

2. Ejemplos básicos de uso de la función NOW()

Veamos ejemplos básicos de cómo obtener la fecha y hora actuales usando la función NOW().

SELECT NOW();

Esta consulta devuelve la fecha y hora actuales. Además de obtenerla como una cadena, también puedes obtenerla en formato numérico. Con la siguiente consulta, la fecha y hora actuales se devuelven en formato numérico (YYYYMMDDHHMMSS).

SELECT NOW() + 0;

Por ejemplo, el resultado puede devolverse como “20241024163000”, lo cual es conveniente al manejar el valor de forma numérica.

Especificar la precisión de segundos fraccionarios

La función NOW() permite especificar la precisión de segundos fraccionarios. Puedes establecer la precisión mediante un argumento como se muestra a continuación.

SELECT NOW(3);

Esta consulta devuelve un resultado con precisión de milisegundos (tres dígitos después del punto decimal). Por ejemplo, puede devolver un valor como “2024-10-24 16:30:00.123”. Esta característica es extremadamente útil en sistemas que requieren precisión a nivel de segundos.

3. Diferencia entre SYSDATE() y NOW()

Existe una función similar a NOW() llamada SYSDATE(), pero se comportan ligeramente diferente.

  • NOW() : Obtiene la hora al inicio de la ejecución de la consulta y mantiene el mismo valor durante toda la sentencia. Incluso si una transacción se ejecuta durante mucho tiempo, devuelve el mismo resultado.
  • SYSDATE() : Obtiene la hora actual en cada paso de la consulta. En otras palabras, incluso durante transacciones de larga duración, devuelve la hora actual en tiempo real.

Por ejemplo, en procesos por lotes de larga duración, SYSDATE() puede proporcionar resultados en tiempo real más precisos. Sin embargo, cuando la consistencia de la transacción es importante, generalmente se recomienda NOW().

Ejemplo que muestra la diferencia dentro de una consulta

La siguiente consulta demuestra la diferencia de comportamiento entre SYSDATE() y NOW().

SELECT NOW(), SYSDATE();

El resultado puede verse así.

NOW():     2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01

La diferencia de tiempo en el momento en que se ejecuta la consulta se refleja en SYSDATE(), mientras que NOW() conserva la hora en que comenzó la ejecución de la consulta. Aunque la diferencia es sutil, es importante elegir la función adecuada según el caso de uso.

4. Aplicaciones prácticas de la función NOW()

La función NOW() es muy útil en escenarios específicos. Por ejemplo, si deseas registrar automáticamente la fecha y hora cuando se insertan datos, puedes usar la función NOW() como se muestra a continuación.

INSERT INTO users (username, created_at) 
VALUES ('example_user', NOW());

Esto registra automáticamente la hora actual en la columna created_at cuando se inserta el registro. Esta característica es especialmente valiosa para el registro de logs y el seguimiento de eventos.

Además, si deseas recuperar datos creados en los últimos siete días, puedes usar la función NOW() de la siguiente manera.

SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;

Esta consulta recupera todos los registros creados en los últimos siete días a partir de la fecha y hora actuales. La función NOW() es extremadamente eficaz para la extracción de datos dependientes del tiempo.

5. Consideraciones importantes al usar la función NOW()

Hay varios puntos importantes a considerar al usar la función NOW(). En particular, puede afectar la consistencia de las transacciones, por lo que es importante usarla de manera adecuada según el contexto.

  • Comportamiento dentro de transacciones: La función NOW() devuelve un resultado consistente dentro de una transacción, lo que significa que devuelve la misma marca de tiempo incluso durante procesos de larga duración. Esto es importante para mantener la consistencia de los datos. Sin embargo, si se requieren marcas de tiempo en tiempo real, usar SYSDATE() es más apropiado.

Además, dado que la función NOW() depende de la configuración de zona horaria, puede devolver resultados diferentes según la configuración del sistema. En aplicaciones globales, es esencial diseñar teniendo en cuenta las consideraciones de zona horaria.