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ędzy0
i23
. Jeśli godzina jest poza tym zakresem,EXTRACT()
będzie iterować przez0
i23
tyle razy, ile potrzeba, aby zwrócić wartość między0
i23
.
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 | +-------------------+--------------------------------+