A continuación hay 4 funciones que le permiten devolver la hora desde un valor de tiempo en MariaDB.
La HOUR()
Función
La HOUR()
la función devuelve la hora para un TIME
dado o DATETIME
expresión. Acepta un argumento, que es el tiempo del que desea extraer la hora.
Ejemplo:
SELECT HOUR('03:45:30');
Resultado:
+------------------+ | HOUR('03:45:30') | +------------------+ | 3 | +------------------+
Para valores de hora del día, devuelve la hora como un número en el rango 0
a 23
. Sin embargo, el rango de TIME
los valores pueden ser mucho mayores y, por lo tanto, el valor devuelto puede ser mucho mayor que 23
. Específicamente, TIME
los valores pueden estar en el rango '-838:59:59.999999'
a '838:59:59.999999'
.
Aquí hay un ejemplo con una parte de hora más grande:
SELECT HOUR('838:45:30');
Resultado:
+-------------------+ | HOUR('838:45:30') | +-------------------+ | 838 | +-------------------+
Si el tiempo está fuera del rango aceptado para TIME
valores, el valor de retorno es 838
con una advertencia
TIME
Los valores también pueden ser negativos. En tales casos, HOUR()
devuelve un valor positivo.
El EXTRACT()
Función
El EXTRACT()
La función le permite extraer una unidad específica del valor de fecha/hora. Por lo tanto, puede usarlo para extraer la hora (así como otras unidades) del valor de la hora.
Ejemplo:
SELECT EXTRACT(HOUR FROM '10:47:01');
Resultado:
+-------------------------------+ | EXTRACT(HOUR FROM '10:47:01') | +-------------------------------+ | 10 | +-------------------------------+
El TIME_FORMAT()
Función
El TIME_FORMAT()
La función le permite formatear un valor de tiempo basado en una cadena de formato. La cadena de formato especifica cómo debe formatearse la hora.
Por lo tanto, puede utilizar esta función para devolver la hora (así como los minutos y segundos) a partir de la hora. Hay varias opciones para devolver la hora.
Aquí hay un ejemplo que devuelve la hora en varias formas:
SELECT
TIME_FORMAT('18:45:30', '%H') AS '%H',
TIME_FORMAT('18:45:30', '%h') AS '%h',
TIME_FORMAT('18:45:30', '%I') AS '%I',
TIME_FORMAT('18:45:30', '%k') AS '%k',
TIME_FORMAT('18:45:30', '%l') AS '%l';
Resultado:
+------+------+------+------+------+ | %H | %h | %I | %k | %l | +------+------+------+------+------+ | 18 | 06 | 06 | 18 | 6 | +------+------+------+------+------+
Aquí hay una descripción de cada uno de esos especificadores de formato:
Especificador de formato | Descripción |
---|---|
%H | Hora con 2 dígitos entre 00-23. |
%h | Hora con 2 dígitos entre 01-12. |
%I | Hora con 2 dígitos entre 01-12. |
%k | Hora con 1 dígito entre 0-23. |
%l | Hora con 1 dígito entre 1-12. |
El TIME_FORMAT()
La función acepta un subconjunto de las cadenas de formato que se pueden usar con DATE_FORMAT()
función. Consulte Cadenas de formato de MariaDB para obtener una lista completa de cadenas/especificadores de formato que se pueden usar con DATE_FORMAT()
. El TIME_FORMAT()
La función solo acepta especificadores de formato para horas, minutos y segundos. Cualquier otro especificador de formato da como resultado null
o 0
siendo devuelto.
El DATE_FORMAT()
Función
El DATE_FORMAT()
La función le permite formatear una fecha o un valor de fecha y hora en función de una cadena de formato. La cadena de formato especifica cómo debe formatearse la fecha/hora.
Por lo tanto, podemos usar los mismos especificadores de formato que usamos con TIME_FORMAT()
función del ejemplo anterior. Sin embargo, DATE_FORMAT()
no acepta un TIME
valor, por lo que necesitaremos pasar un DATETIME
valor.
SELECT
DATE_FORMAT('2023-01-01 18:45:30', '%H') AS '%H',
DATE_FORMAT('2023-01-01 18:45:30', '%h') AS '%h',
DATE_FORMAT('2023-01-01 18:45:30', '%I') AS '%I',
DATE_FORMAT('2023-01-01 18:45:30', '%k') AS '%k',
DATE_FORMAT('2023-01-01 18:45:30', '%l') AS '%l';
Resultado:
+------+------+------+------+------+ | %H | %h | %I | %k | %l | +------+------+------+------+------+ | 18 | 06 | 06 | 18 | 6 | +------+------+------+------+------+
Pasando solo un TIME
el valor no es suficiente con esta función:
SELECT
DATE_FORMAT('18:45:30', '%H') AS '%H',
DATE_FORMAT('18:45:30', '%h') AS '%h',
DATE_FORMAT('18:45:30', '%I') AS '%I',
DATE_FORMAT('18:45:30', '%k') AS '%k',
DATE_FORMAT('18:45:30', '%l') AS '%l';
Resultado:
+------+------+------+------+------+ | %H | %h | %I | %k | %l | +------+------+------+------+------+ | NULL | NULL | NULL | NULL | NULL | +------+------+------+------+------+ 1 row in set, 5 warnings (0.000 sec)
Mostrar las advertencias:
SHOW WARNINGS;
Resultado:
+---------+------+--------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------+ | Warning | 1292 | Incorrect datetime value: '18:45:30' | | Warning | 1292 | Incorrect datetime value: '18:45:30' | | Warning | 1292 | Incorrect datetime value: '18:45:30' | | Warning | 1292 | Incorrect datetime value: '18:45:30' | | Warning | 1292 | Incorrect datetime value: '18:45:30' | +---------+------+--------------------------------------+