sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona SYSDATE() en MariaDB

En MariaDB, SYSDATE() es una función de fecha y hora integrada que devuelve la fecha y la hora actuales.

Devuelve la hora en que se ejecutó la función (que puede ser diferente a la hora en que se ejecutó la sentencia).

El valor devuelto se devuelve en 'YYYY-MM-DD HH:MM:SS' o YYYYMMDDHHMMSS.uuuuuu dependiendo de si la función se usa en un contexto de cadena o numérico.

El valor devuelto se expresa en la zona horaria actual.

También tiene la opción de especificar la precisión de microsegundos.

Sintaxis

La sintaxis es así:

SYSDATE([precision])

Donde precision es un argumento opcional que especifica la precisión de microsegundos.

Ejemplo

He aquí un ejemplo:

SELECT SYSDATE();

Resultado:

+---------------------+
| SYSDATE()           |
+---------------------+
| 2021-05-27 08:40:41 |
+---------------------+

Contexto numérico

Cuando SYSDATE() se usa en un contexto numérico, el resultado está en YYYYMMDDHHMMSS.uuuuuu formato.

Ejemplo:

SELECT
    SYSDATE(),
    SYSDATE() + 0;

Resultado:

+---------------------+----------------+
| SYSDATE()           | SYSDATE() + 0  |
+---------------------+----------------+
| 2021-05-27 08:41:19 | 20210527084119 |
+---------------------+----------------+

Precisión

Aquí hay un ejemplo de cómo especificar una precisión de microsegundos:

SELECT
    SYSDATE(6),
    SYSDATE(6) + 0;

Resultado:

+----------------------------+-----------------------+
| SYSDATE(6)                 | SYSDATE(6) + 0        |
+----------------------------+-----------------------+
| 2021-05-27 08:41:44.561665 | 20210527084144.562263 |
+----------------------------+-----------------------+

El valor máximo para la precisión de microsegundos es 6. Esto es lo que sucede cuando se pasa un número más alto para la precisión:

SELECT SYSDATE(12);

Resultado:

ERROR 1426 (42000): Too big precision 12 specified for 'sysdate'. Maximum is 6

SYSDATE() vs NOW()

Aunque SYSDATE() es similar a NOW() función, hay diferencias.

Una de las principales diferencias es que SYSDATE() devuelve la hora en que se ejecuta, mientras que NOW() devuelve la hora en que la declaración comenzó a ejecutarse. Cuando se ejecuta dentro de un procedimiento almacenado o activador, NOW() devolverá la hora en que el procedimiento almacenado o el disparador comenzaron a ejecutarse.

Aquí hay un ejemplo que demuestra esta diferencia:

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

Resultado (usando salida vertical):

    NOW(): 2021-05-27 08:47:06
SYSDATE(): 2021-05-27 08:47:06
 SLEEP(5): 0
    NOW(): 2021-05-27 08:47:06
SYSDATE(): 2021-05-27 08:47:11

En este caso usamos SLEEP() función para pausar el procesamiento durante cinco segundos antes del segundo lote de llamadas de función.

Podemos ver que la segunda vez SYSDATE() fue invocado, su valor de retorno fue diferente a la primera vez. NOW() por otro lado, devolvió el mismo valor en ambas ocasiones.

Hay algunas otras cosas a tener en cuenta al usar SYSDATE() . Por ejemplo, SET TIMESTAMP no lo afecta (mientras que afectar el NOW() función). Además, SYSDATE() no es seguro para la replicación si se utiliza el registro binario basado en declaraciones. Sin embargo, hay maneras de lidiar con esto, si es necesario. Consulte la documentación de MariaDB para obtener más información.