MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

HOUR() vs EXTRACT(HOUR…) no MariaDB:Qual é a diferença?


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, retorna 838 )
  • EXTRACT(HOUR FROM ...) retorna um valor entre 0 e 23 . Se a hora estiver fora desse intervalo, EXTRACT() irá iterar através de 0 e 23 quantas vezes forem necessárias para retornar um valor entre 0 e 23 .

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 |
+-------------------+--------------------------------+