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

4 funciones para obtener la hora de un valor de tiempo en MariaDB

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