MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment fonctionne SYSDATE() dans MariaDB

Dans MariaDB, SYSDATE() est une fonction de date et d'heure intégrée qui renvoie la date et l'heure actuelles.

Elle renvoie l'heure à laquelle la fonction a été exécutée (qui peut être différente de l'heure à laquelle l'instruction a été exécutée).

La valeur de retour est renvoyée au format 'YYYY-MM-DD HH:MM:SS' ou YYYYMMDDHHMMSS.uuuuuu format, selon que la fonction est utilisée dans un contexte de chaîne ou numérique.

La valeur de retour est exprimée dans le fuseau horaire actuel.

Vous avez également la possibilité de spécifier la précision à la microseconde.

Syntaxe

La syntaxe ressemble à ceci :

SYSDATE([precision])

precision est un argument facultatif qui spécifie la précision à la microseconde.

Exemple

Voici un exemple :

SELECT SYSDATE();

Résultat :

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

Contexte numérique

Lorsque SYSDATE() est utilisé dans un contexte numérique, le résultat est au format YYYYMMDDHHMMSS.uuuuuu formater.

Exemple :

SELECT
    SYSDATE(),
    SYSDATE() + 0;

Résultat :

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

Précision

Voici un exemple de spécification d'une précision à la microseconde :

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

Résultat :

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

La valeur maximale pour la précision de la microseconde est de 6. Voici ce qui se passe lorsqu'un nombre plus élevé est passé pour la précision :

SELECT SYSDATE(12);

Résultat :

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

SYSDATE() contre NOW()

Bien que SYSDATE() est similaire à NOW() fonction, il y a des différences.

L'une des principales différences est que SYSDATE() renvoie l'heure à laquelle il s'exécute, alors que NOW() renvoie l'heure à laquelle l'instruction a commencé à s'exécuter. Lorsqu'il est exécuté dans une procédure stockée ou un déclencheur, NOW() renverra l'heure à laquelle la procédure stockée ou le déclencheur a commencé à s'exécuter.

Voici un exemple qui illustre cette différence :

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

Résultat (en utilisant la sortie verticale) :

    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

Dans ce cas, nous avons utilisé le SLEEP() fonction pour suspendre le traitement pendant cinq secondes avant le deuxième lot d'appels de fonction.

Nous pouvons voir que la deuxième fois SYSDATE() a été invoqué, sa valeur de retour était différente de la première fois. NOW() d'autre part, a renvoyé la même valeur les deux fois.

Il y a quelques autres choses à garder à l'esprit lors de l'utilisation de SYSDATE() . Par exemple, SET TIMESTAMP ne l'affecte pas (alors qu'il fait affecter le NOW() une fonction). Aussi, SYSDATE() n'est pas sûr pour la réplication si la journalisation binaire basée sur des instructions est utilisée. Cependant, il existe des moyens de gérer cela, si nécessaire. Consultez la documentation de MariaDB pour plus d'informations.