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

4 funciones que extraen microsegundos de un valor de tiempo en MariaDB

A continuación hay 4 funciones que le permiten devolver la parte de microsegundos de un valor de tiempo en MariaDB.

El MICROSECOND() Función

El MICROSECOND() la función devuelve la parte de microsegundos de un TIME dado o DATETIME expresión. Acepta un argumento, que es el tiempo del que desea extraer los microsegundos.

Ejemplo:

SELECT MICROSECOND('10:45:30.123456');

Resultado:

+--------------------------------+
| MICROSECOND('10:45:30.123456') |
+--------------------------------+
|                         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, MICROSECOND() devuelve un valor positivo.

Aquí hay un valor de tiempo negativo con una parte de microsegundos:

SELECT MICROSECOND('-838:59:59.999999');

Resultado:

+----------------------------------+
| MICROSECOND('-838:59:59.999999') |
+----------------------------------+
|                           999999 |
+----------------------------------+

La parte de los microsegundos se extrae como se esperaba.

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 los microsegundos (así como otras unidades) del valor del tiempo.

Ejemplo:

SELECT EXTRACT(MICROSECOND FROM '10:45:30.123456');

Resultado:

+---------------------------------------------+
| EXTRACT(MICROSECOND FROM '10:45:30.123456') |
+---------------------------------------------+
|                                      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 utilizar esta función para devolver los microsegundos (así como las horas, los minutos y los segundos) de la hora.

El %f especificador de formato devuelve los microsegundos:

SELECT TIME_FORMAT('10:07:30.003456', '%f');

Resultado:

+--------------------------------------+
| TIME_FORMAT('10:07:30.003456', '%f') |
+--------------------------------------+
| 003456                               |
+--------------------------------------+

También puedes usar el $s o $S especificador de formato para devolver la parte de los segundos:

SELECT 
    TIME_FORMAT('10:07:30.123456', '%s') AS "Seconds",
    TIME_FORMAT('10:07:30.123456', '%f') AS "Microseconds",
    TIME_FORMAT('10:07:30.123456', '%s.%f') AS "Both";

Resultado:

+---------+--------------+-----------+
| Seconds | Microseconds | Both      |
+---------+--------------+-----------+
| 30      | 123456       | 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. Consulte Cadenas de formato 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.007123', '%f');

Resultado:

+-------------------------------------------------+
| DATE_FORMAT('2023-01-01 10:07:30.007123', '%f') |
+-------------------------------------------------+
| 007123                                          |
+-------------------------------------------------+

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

SELECT DATE_FORMAT('10:07:30.007123', '%f');

Resultado:

+--------------------------------------+
| DATE_FORMAT('10:07:30.007123', '%f') |
+--------------------------------------+
| NULL                                 |
+--------------------------------------+
1 row in set, 1 warning (0.003 sec)

Veamos la advertencia:

SHOW WARNINGS;

Resultado:

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