MariaDB má HOUR() funkce, která extrahuje hodinovou část z časové hodnoty. MariaDB má také EXTRACT() funkce, která také dokáže extrahovat hodinovou část z časové hodnoty.
Tyto funkce však ne vždy vrátí stejný výsledek.
Čtěte dále, abyste viděli rozdíl mezi HOUR() a EXTRACT(HOUR FROM ...) v MariaDB.
Rozdíl
HOUR() a EXTRACT(HOUR FROM ...) oba vrátí stejnou hodnotu, když je časový výraz výrazem denní doby. To znamená, že pokud je hodinová část mezi 0 a 23 , pak vrátí stejný výsledek.
Rozdíl se projeví, když je hodinová část větší než 23 .
TIME hodnoty mohou být v rozsahu '-838:59:59.999999' na '838:59:59.999999' , ale hodnota denní doby může být pouze mezi 0 a 23 .
Pokud je časový výraz mimo 0 a 23 rozsah:
HOUR()vrátí skutečnou část hodiny z výrazu (pokud je v rozsahu'-838:59:59.999999'na'838:59:59.999999'– pokud je mimo tento rozsah, vrátí838)EXTRACT(HOUR FROM ...)vrátí hodnotu mezi0a23. Pokud je hodina mimo tento rozsah,EXTRACT()bude iterovat přes0a23tolikrát, kolikrát je potřeba, aby se vrátila hodnota mezi0a23.
Příklad
Zde je příklad k demonstraci.
SELECT
HOUR('24:00:00'),
EXTRACT(HOUR FROM '24:00:00'); Výsledek:
+------------------+-------------------------------+
| HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') |
+------------------+-------------------------------+
| 24 | 0 |
+------------------+-------------------------------+
HOUR() funkce vrací skutečnou hodinu, která byla poskytnuta, zatímco EXTRACT() vrátí 0 . Důvodem je 24 je vyšší než 23 , což je nejvyšší hodnota EXTRACT() se vrátí na hodinovou část. V tomto případě EXTRACT() spustí počítání znovu, počínaje 0 .
Bude to dělat tolikrát, kolikrát bude potřeba, takže výsledek bude vždy mezi 0 a 23 .
Zde je další příklad s mnohem větší hodinovou částí:
SELECT
HOUR('742:00:00'),
EXTRACT(HOUR FROM '742:00:00'); Výsledek:
+-------------------+--------------------------------+
| HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') |
+-------------------+--------------------------------+
| 742 | 22 |
+-------------------+--------------------------------+