MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

HOUR() vs. EXTRACT(HOUR …) in MariaDB:Was ist der Unterschied?

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 wird 838 zurückgegeben )
  • EXTRACT(HOUR FROM ...) gibt einen Wert zwischen 0 zurück und 23 . Wenn die Stunde außerhalb dieses Bereichs liegt, EXTRACT() durchläuft 0 und 23 so oft wie nötig, um einen Wert zwischen 0 zurückzugeben und 23 .

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 |
+-------------------+--------------------------------+