MariaDB има HOUR()
функция, която извлича часовата част от времева стойност. MariaDB също има EXTRACT()
функция, която може също да извлече частта от часа от времева стойност.
Тези функции обаче не винаги връщат един и същ резултат.
Прочетете, за да видите разликата между HOUR()
и EXTRACT(HOUR FROM ...)
в MariaDB.
Разликата
HOUR()
и EXTRACT(HOUR FROM ...)
и двете връщат една и съща стойност, когато изразът за време е израз за време от деня. Тоест, ако часовата част е между 0
и 23
, след което те връщат същия резултат.
Разликата се проявява, когато часовата част е по-голяма от 23
.
TIME
стойностите могат да бъдат в диапазона '-838:59:59.999999'
до '838:59:59.999999'
, но стойността за час от деня може да бъде само между 0
и 23
.
Ако изразът за време е извън 0
и 23
диапазон:
HOUR()
връща действителната част от часа от израза (стига да е в диапазона'-838:59:59.999999'
до'838:59:59.999999'
– ако е извън този диапазон, връща838
)EXTRACT(HOUR FROM ...)
връща стойност между0
и23
. Ако часът е извън този диапазон,EXTRACT()
ще повтори през0
и23
толкова пъти, колкото е необходимо, за да се върне стойност между0
и23
.
Пример
Ето пример за демонстрация.
SELECT
HOUR('24:00:00'),
EXTRACT(HOUR FROM '24:00:00');
Резултат:
+------------------+-------------------------------+ | HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') | +------------------+-------------------------------+ | 24 | 0 | +------------------+-------------------------------+
HOUR()
функцията връща действителния час, който е предоставен, докато EXTRACT()
връща 0
. Това е така, защото 24
е по-високо от 23
, което е най-високата стойност EXTRACT()
ще се върне за часовата част. В този случай EXTRACT()
започва отново броенето, започвайки от 0
.
Той ще продължи да прави това толкова пъти, колкото е необходимо, така че резултатът винаги да е между 0
и 23
.
Ето още един пример с много по-голяма част от часа:
SELECT
HOUR('742:00:00'),
EXTRACT(HOUR FROM '742:00:00');
Резултат:
+-------------------+--------------------------------+ | HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') | +-------------------+--------------------------------+ | 742 | 22 | +-------------------+--------------------------------+