MariaDB tem uma
HOUR()
função que extrai a parte da hora de um valor de hora. MariaDB também tem um EXTRACT()
função que também pode extrair a parte da hora de um valor de hora. No entanto, essas funções nem sempre retornam o mesmo resultado.
Continue lendo para ver a diferença entre
HOUR()
e EXTRACT(HOUR FROM ...)
em MariaDB. A diferença
A
HOUR()
e EXTRACT(HOUR FROM ...)
ambos retornam o mesmo valor quando a expressão de hora é uma expressão de hora do dia. Ou seja, se a parte da hora estiver entre 0
e 23
, então eles retornam o mesmo resultado. A diferença se manifesta quando a parte da hora é maior que
23
. TIME
os valores podem estar no intervalo '-838:59:59.999999'
para '838:59:59.999999'
, mas um valor de hora do dia só pode estar entre 0
e 23
. Se a expressão de tempo estiver fora do
0
e 23
alcance:HOUR()
retorna a parte da hora real da expressão (desde que esteja dentro do intervalo'-838:59:59.999999'
para'838:59:59.999999'
– se estiver fora desse intervalo, retorna838
)EXTRACT(HOUR FROM ...)
retorna um valor entre0
e23
. Se a hora estiver fora desse intervalo,EXTRACT()
irá iterar através de0
e23
quantas vezes forem necessárias para retornar um valor entre0
e23
.
Exemplo
Aqui está um exemplo para demonstrar.
SELECT
HOUR('24:00:00'),
EXTRACT(HOUR FROM '24:00:00');
Resultado:
+------------------+-------------------------------+ | HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') | +------------------+-------------------------------+ | 24 | 0 | +------------------+-------------------------------+
A
HOUR()
A função retorna a hora real que foi fornecida, enquanto EXTRACT()
retorna 0
. Isso ocorre porque 24
é maior que 23
, que é o valor mais alto EXTRACT()
retornará para a parte da hora. Neste caso, EXTRACT()
inicia a contagem novamente, começando em 0
. Ele continuará fazendo isso quantas vezes for necessário, para que o resultado esteja sempre entre
0
e 23
. Aqui está outro exemplo com uma parte de uma hora muito maior:
SELECT
HOUR('742:00:00'),
EXTRACT(HOUR FROM '742:00:00');
Resultado:
+-------------------+--------------------------------+ | HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') | +-------------------+--------------------------------+ | 742 | 22 | +-------------------+--------------------------------+