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 renvoie838
)EXTRACT(HOUR FROM ...)
renvoie une valeur entre0
et23
. Si l'heure est en dehors de cette plage,EXTRACT()
va parcourir0
et23
autant de fois que nécessaire pour retourner une valeur entre0
et23
.
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 | +-------------------+--------------------------------+