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

4 formas de separar horas, minutos y segundos de un valor de tiempo en MariaDB

MariaDB tiene varias funciones que le permiten extraer varias partes de fecha y hora a partir de valores de fecha/hora. Puede usarlos para separar cada componente de fecha/hora en su propia columna si es necesario.

A continuación se muestran cuatro formas de extraer las horas, los minutos y los segundos de un valor de tiempo en MariaDB. Como beneficio adicional, también incluiremos microsegundos.

La HOUR() , MINUTE() , SECOND() y MICROSECOND() Funciones

La HOUR() , MINUTE() y SECOND() Las funciones extraen las horas, los minutos y los segundos de una fecha o un valor de fecha y hora, respectivamente.

Y si está trabajando con mayor precisión, puede usar MICROSECOND() función para devolver la parte de microsegundos.

Aquí hay un ejemplo del uso de estas funciones para devolver cada componente de tiempo en su propia columna:

SELECT 
    HOUR('10:45:30.123456') AS "Hours",
    MINUTE('10:45:30.123456') AS "Minutes",
    SECOND('10:45:30.123456') AS "Seconds",
    MICROSECOND('10:45:30.123456') AS "Microseconds";

Resultado:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
|    10 |      45 |      30 |       123456 |
+-------+---------+---------+--------------+

TIME los valores pueden estar en el rango '-838:59:59.999999' a '838:59:59.999999' .

TIME Los valores también pueden ser negativos. En tales casos, los valores devueltos siguen siendo positivos.

Aquí hay un valor de tiempo negativo:

SELECT 
    HOUR('-10:45:30.123456') AS "Hours",
    MINUTE('-10:45:30.123456') AS "Minutes",
    SECOND('-10:45:30.123456') AS "Seconds",
    MICROSECOND('-10:45:30.123456') AS "Microseconds";

Resultado:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
|    10 |      45 |      30 |       123456 |
+-------+---------+---------+--------------+

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 las horas, los minutos, los segundos y los microsegundos del valor de la hora.

Ejemplo:

SELECT 
    EXTRACT(HOUR FROM '10:45:30.123456') AS "Hours",
    EXTRACT(MINUTE FROM '10:45:30.123456') AS "Minutes",
    EXTRACT(SECOND FROM '10:45:30.123456') AS "Seconds",
    EXTRACT(MICROSECOND FROM '10:45:30.123456') AS "Microseconds";

Resultado:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
|    10 |      45 |      30 |       123456 |
+-------+---------+---------+--------------+

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 usar esta función para devolver las distintas partes de tiempo por separado.

Ejemplo:

SELECT 
    TIME_FORMAT('10:07:30.123456', '%H') AS "Hours",
    TIME_FORMAT('10:07:30.123456', '%i') AS "Minutes",
    TIME_FORMAT('10:07:30.123456', '%s') AS "Seconds",
    TIME_FORMAT('10:07:30.123456', '%f') AS "Microseconds";

Resultado:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
| 10    | 07      | 30      | 123456       |
+-------+---------+---------+--------------+

También es posible devolver todos los componentes de tiempo por separado, pero en la misma columna.

He aquí un ejemplo de lo que quiero decir:

SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');

Resultado:

+-----------------------------------------------+
| TIME_FORMAT('10:07:30.123456', '%H %i %s %f') |
+-----------------------------------------------+
| 10 07 30 123456                               |
+-----------------------------------------------+

El TIME_FORMAT() La función acepta un subconjunto de las cadenas de formato que se pueden usar con DATE_FORMAT() función.

Hay varios especificadores de formato posibles para la parte de la hora. El especificador de formato utilizado anteriormente devuelve la hora con dos dígitos entre 00 y 23 . 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/subsegundos. 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 10:07:30.123456', '%H') AS "Hours",
    DATE_FORMAT('2023-01-01 10:07:30.123456', '%i') AS "Minutes",
    DATE_FORMAT('2023-01-01 10:07:30.123456', '%s') AS "Seconds",
    DATE_FORMAT('2023-01-01 10:07:30.123456', '%f') AS "Microseconds";

Resultado:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
| 10    | 07      | 30      | 123456       |
+-------+---------+---------+--------------+

Pasando solo un TIME value no funciona con esta función:

SELECT 
    DATE_FORMAT('10:07:30.123456', '%H') AS "Hours",
    DATE_FORMAT('10:07:30.123456', '%i') AS "Minutes",
    DATE_FORMAT('10:07:30.123456', '%s') AS "Seconds",
    DATE_FORMAT('10:07:30.123456', '%f') AS "Microseconds";

Resultado:

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
| NULL  | NULL    | NULL    | NULL         |
+-------+---------+---------+--------------+
1 row in set, 4 warnings (0.003 sec)

Veamos la advertencia:

SHOW WARNINGS;

Resultado:

+---------+------+---------------------------------------------+
| Level   | Code | Message                                     |
+---------+------+---------------------------------------------+
| Warning | 1292 | Incorrect datetime value: '10:07:30.123456' |
| Warning | 1292 | Incorrect datetime value: '10:07:30.123456' |
| Warning | 1292 | Incorrect datetime value: '10:07:30.123456' |
| Warning | 1292 | Incorrect datetime value: '10:07:30.123456' |
+---------+------+---------------------------------------------+