MariaDB ma funkcję HOUR() funkcja, która wyodrębnia część godzinową z wartości czasu. MariaDB ma również funkcję EXTRACT() funkcja, która może również wyodrębnić część godzinową z wartości czasu.
Jednak te funkcje nie zawsze zwracają ten sam wynik.
Czytaj dalej, aby zobaczyć różnicę między HOUR() i EXTRACT(HOUR FROM ...) w MariaDB.
Różnica
HOUR() i EXTRACT(HOUR FROM ...) oba zwracają tę samą wartość, gdy wyrażenie czasu jest wyrażeniem czasu dnia. To znaczy, jeśli część godzinowa jest pomiędzy 0 i 23 , wtedy zwracają ten sam wynik.
Różnica pojawia się, gdy część godzinowa jest większa niż 23 .
TIME wartości mogą należeć do zakresu '-838:59:59.999999' do '838:59:59.999999' , ale wartość czasu dnia może zawierać się tylko w przedziale 0 i 23 .
Jeśli wyrażenie czasu jest poza 0 i 23 zasięg:
HOUR()zwraca rzeczywistą część godziny z wyrażenia (o ile mieści się w zakresie'-838:59:59.999999'do'838:59:59.999999'– poza tym zakresem zwraca838)EXTRACT(HOUR FROM ...)zwraca wartość pomiędzy0i23. Jeśli godzina jest poza tym zakresem,EXTRACT()będzie iterować przez0i23tyle razy, ile potrzeba, aby zwrócić wartość między0i23.
Przykład
Oto przykład do zademonstrowania.
SELECT
HOUR('24:00:00'),
EXTRACT(HOUR FROM '24:00:00'); Wynik:
+------------------+-------------------------------+
| HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') |
+------------------+-------------------------------+
| 24 | 0 |
+------------------+-------------------------------+
HOUR() funkcja zwraca rzeczywistą podaną godzinę, natomiast EXTRACT() zwraca 0 . Dzieje się tak, ponieważ 24 jest wyższy niż 23 , która jest najwyższą wartością EXTRACT() wróci na część godzinową. W tym przypadku EXTRACT() rozpoczyna odliczanie od nowa, zaczynając od 0 .
Będzie to robił tyle razy, ile będzie to konieczne, aby wynik był zawsze między 0 i 23 .
Oto kolejny przykład ze znacznie większą częścią godzinową:
SELECT
HOUR('742:00:00'),
EXTRACT(HOUR FROM '742:00:00'); Wynik:
+-------------------+--------------------------------+
| HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') |
+-------------------+--------------------------------+
| 742 | 22 |
+-------------------+--------------------------------+