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

HOUR() vs EXTRACT(HOUR …) dans MariaDB :Quelle est la différence ?

MariaDB a un HOUR() fonction qui extrait la partie heure d'une valeur de temps. MariaDB a également un EXTRACT() fonction qui peut également extraire la partie heure d'une valeur de temps.

Cependant, ces fonctions ne renvoient pas toujours le même résultat.

Lisez la suite pour voir la différence entre HOUR() et EXTRACT(HOUR FROM ...) dans MariaDB.

La différence

Le HOUR() et EXTRACT(HOUR FROM ...) les deux renvoient la même valeur lorsque l'expression d'heure est une expression d'heure du jour. Autrement dit, si la partie heure est comprise entre 0 et 23 , ils renvoient le même résultat.

La différence se manifeste lorsque la partie horaire est supérieure à 23 .

TIME les valeurs peuvent être comprises dans la plage '-838:59:59.999999' à '838:59:59.999999' , mais une valeur d'heure du jour ne peut être comprise qu'entre 0 et 23 .

Si l'expression de temps est en dehors du 0 et 23 plage :

  • HOUR() renvoie la partie heure réelle de l'expression (tant qu'elle est comprise dans la plage '-838:59:59.999999' à '838:59:59.999999' – si en dehors de cette plage, il renvoie 838 )
  • EXTRACT(HOUR FROM ...) renvoie une valeur entre 0 et 23 . Si l'heure est en dehors de cette plage, EXTRACT() va parcourir 0 et 23 autant de fois que nécessaire pour retourner une valeur entre 0 et 23 .

Exemple

Voici un exemple pour illustrer.

SELECT 
    HOUR('24:00:00'),
    EXTRACT(HOUR FROM '24:00:00');

Résultat :

+------------------+-------------------------------+
| HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') |
+------------------+-------------------------------+
|               24 |                             0 |
+------------------+-------------------------------+

Le HOUR() renvoie l'heure réelle qui a été fournie, alors que EXTRACT() renvoie 0 . C'est parce que 24 est supérieur à 23 , qui est la valeur la plus élevée EXTRACT() reviendra pour la portion horaire. Dans ce cas, EXTRACT() recommence le décompte, en commençant à 0 .

Il continuera à le faire autant de fois que nécessaire, de sorte que le résultat soit toujours compris entre 0 et 23 .

Voici un autre exemple avec une partie horaire beaucoup plus importante :

SELECT 
    HOUR('742:00:00'),
    EXTRACT(HOUR FROM '742:00:00');

Résultat :

+-------------------+--------------------------------+
| HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') |
+-------------------+--------------------------------+
|               742 |                             22 |
+-------------------+--------------------------------+