MariaDB hat eine HOUR() Funktion, die den Stundenanteil aus einem Zeitwert extrahiert. MariaDB hat auch ein EXTRACT() Funktion, die auch den Stundenanteil aus einem Zeitwert extrahieren kann.
Diese Funktionen liefern jedoch nicht immer das gleiche Ergebnis.
Lesen Sie weiter, um den Unterschied zwischen HOUR() zu sehen und EXTRACT(HOUR FROM ...) in MariaDB.
Der Unterschied
Die HOUR() und EXTRACT(HOUR FROM ...) beide geben denselben Wert zurück, wenn der Zeitausdruck ein Tageszeitausdruck ist. Das heißt, wenn der Stundenteil zwischen 0 liegt und 23 , dann geben sie dasselbe Ergebnis zurück.
Der Unterschied zeigt sich, wenn der Stundenteil größer als 23 ist .
TIME Werte können im Bereich '-838:59:59.999999' liegen zu '838:59:59.999999' , aber ein Uhrzeitwert kann nur zwischen 0 liegen und 23 .
Wenn der Zeitausdruck außerhalb des 0 liegt und 23 Reichweite:
HOUR()gibt den tatsächlichen Stundenteil aus dem Ausdruck zurück (solange er im Bereich'-838:59:59.999999'liegt zu'838:59:59.999999'– außerhalb dieses Bereichs wird838zurückgegeben )EXTRACT(HOUR FROM ...)gibt einen Wert zwischen0zurück und23. Wenn die Stunde außerhalb dieses Bereichs liegt,EXTRACT()durchläuft0und23so oft wie nötig, um einen Wert zwischen0zurückzugeben und23.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SELECT
HOUR('24:00:00'),
EXTRACT(HOUR FROM '24:00:00'); Ergebnis:
+------------------+-------------------------------+
| HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') |
+------------------+-------------------------------+
| 24 | 0 |
+------------------+-------------------------------+
Die HOUR() Die Funktion gibt die tatsächlich angegebene Stunde zurück, während EXTRACT() gibt 0 zurück . Das liegt daran, dass 24 ist höher als 23 , das ist der höchste Wert EXTRACT() wird für den Stundenteil zurückkehren. In diesem Fall EXTRACT() startet die Zählung erneut, beginnend bei 0 .
Dies wird so oft wie nötig wiederholt, sodass das Ergebnis immer zwischen 0 liegt und 23 .
Hier ist ein weiteres Beispiel mit einem viel größeren Stundenteil:
SELECT
HOUR('742:00:00'),
EXTRACT(HOUR FROM '742:00:00'); Ergebnis:
+-------------------+--------------------------------+
| HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') |
+-------------------+--------------------------------+
| 742 | 22 |
+-------------------+--------------------------------+