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, devuelve838
)EXTRACT(HOUR FROM ...)
devuelve un valor entre0
y23
. Si la hora está fuera de este rango,EXTRACT()
iterará a través de0
y23
tantas veces como sea necesario para devolver un valor entre0
y23
.
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 | +-------------------+--------------------------------+