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 wird838
zurückgegeben )EXTRACT(HOUR FROM ...)
gibt einen Wert zwischen0
zurück und23
. Wenn die Stunde außerhalb dieses Bereichs liegt,EXTRACT()
durchläuft0
und23
so oft wie nötig, um einen Wert zwischen0
zurü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 | +-------------------+--------------------------------+