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 entre0e23. Se a hora estiver fora desse intervalo,EXTRACT()irá iterar através de0e23quantas vezes forem necessárias para retornar um valor entre0e23.
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 |
+-------------------+--------------------------------+