sql >> Base de Datos >  >> RDS >> MariaDB

HORA() vs EXTRACTO(HORA...) en MariaDB:¿Cuál es la diferencia?

MariaDB tiene una HOUR() función que extrae la parte de la hora de un valor de tiempo. MariaDB también tiene un EXTRACT() función que también puede extraer la parte de la hora de un valor de tiempo.

Sin embargo, estas funciones no siempre devuelven el mismo resultado.

Siga leyendo para ver la diferencia entre HOUR() y EXTRACT(HOUR FROM ...) en MariaDB.

La diferencia

La HOUR() y EXTRACT(HOUR FROM ...) ambos devuelven el mismo valor cuando la expresión de tiempo es una expresión de hora del día. Es decir, si la parte horaria está entre 0 y 23 , luego devuelven el mismo resultado.

La diferencia se manifiesta cuando la parte de la hora es mayor que 23 .

TIME los valores pueden estar en el rango '-838:59:59.999999' a '838:59:59.999999' , pero un valor de hora del día solo puede estar entre 0 y 23 .

Si la expresión de tiempo está fuera del 0 y 23 rango:

  • HOUR() devuelve la parte de la hora real de la expresión (siempre que esté dentro del rango '-838:59:59.999999' a '838:59:59.999999' – si está fuera de este rango, devuelve 838 )
  • EXTRACT(HOUR FROM ...) devuelve un valor entre 0 y 23 . Si la hora está fuera de este rango, EXTRACT() iterará a través de 0 y 23 tantas veces como sea necesario para devolver un valor entre 0 y 23 .

Ejemplo

Aquí hay un ejemplo para demostrarlo.

SELECT 
    HOUR('24:00:00'),
    EXTRACT(HOUR FROM '24:00:00');

Resultado:

+------------------+-------------------------------+
| HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') |
+------------------+-------------------------------+
|               24 |                             0 |
+------------------+-------------------------------+

La HOUR() la función devuelve la hora real que se proporcionó, mientras que EXTRACT() devuelve 0 . Esto se debe a que 24 es mayor que 23 , que es el valor más alto EXTRACT() regresará por la parte de la hora. En este caso, EXTRACT() comienza el conteo nuevamente, comenzando en 0 .

Seguirá haciendo esto tantas veces como sea necesario, para que el resultado esté siempre entre 0 y 23 .

Aquí hay otro ejemplo con una parte horaria mucho más grande:

SELECT 
    HOUR('742:00:00'),
    EXTRACT(HOUR FROM '742:00:00');

Resultado:

+-------------------+--------------------------------+
| HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') |
+-------------------+--------------------------------+
|               742 |                             22 |
+-------------------+--------------------------------+