Abaixo estão 4 funções que permitem retornar a parte de microssegundos de um valor de tempo no MariaDB.
O MICROSECOND() Função
O
MICROSECOND() função retorna a parte de microssegundos de um determinado TIME ou DATETIME expressão. Ele aceita um argumento, que é o tempo do qual você deseja extrair os microssegundos. Exemplo:
SELECT MICROSECOND('10:45:30.123456'); Resultado:
+--------------------------------+| MICROSSEGUNDO('10:45:30.123456') |+--------------------------------+| 123456 |+--------------------------------+ TIME os valores podem estar no intervalo '-838:59:59.999999' para '838:59:59.999999' . TIME os valores também podem ser negativos. Nesses casos, MICROSECOND() retorna um valor positivo. Aqui está um valor de tempo negativo com uma parte de microssegundos:
SELECT MICROSECOND('-838:59:59.999999'); Resultado:
+----------------------------------+| MICROSSEGUNDO('-838:59:59.999999') |+----------------------------------+| 999999 |+----------------------------------+ A parte de microssegundos é extraída conforme o esperado.
O EXTRACT() Função
O
EXTRACT() A função permite extrair uma unidade especificada do valor de data/hora. Portanto, você pode usá-lo para extrair os microssegundos (assim como outras unidades) do valor de tempo. Exemplo:
SELECT EXTRACT(MICROSECOND FROM '10:45:30.123456'); Resultado:
+---------------------------------------------+ | EXTRACT(MICROSSEGUNDO DE '10:45:30.123456') |+------------------------------------ ---------+| 123456 |+-------------------------------------------------------------+O
TIME_FORMAT()Função
OTIME_FORMAT()A função permite que você formate um valor de tempo com base em uma string de formato. A string de formato especifica como a hora deve ser formatada.
Portanto, você pode usar esta função para retornar os microssegundos (assim como as horas, minutos e segundos) da hora.
O%fespecificador de formato retorna os microssegundos:
SELECT TIME_FORMAT('10:07:30.003456', '%f');
Resultado:
+--------------------------------------+| TIME_FORMAT('10:07:30.003456', '%f') |+--------------------------------- -----+| 003456 |+-------------------------------------------------+
Você também pode usar o$sou$Sespecificador de formato para retornar a parte dos 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:
+---------+--------------+-----------+| Segundos | Microssegundos | Ambos |+---------+--------------+-----------+| 30 | 123456 | 30.123456 |+---------+--------------+-----------+
OTIME_FORMAT()A função aceita um subconjunto das strings de formato que podem ser usadas com oDATE_FORMAT()função. Veja Strings de Formato MariaDB para uma lista completa de strings/especificadores de formato que podem ser usados comDATE_FORMAT(). OTIME_FORMAT()A função só aceita especificadores de formato para horas, minutos e segundos/sub segundos. Qualquer outro especificador de formato resulta emnullou0sendo devolvido.
O
DATE_FORMAT()Função
ODATE_FORMAT()A função permite que você formate um valor de data ou data e hora com base em uma string de formato. A string de formato especifica como a data/hora deve ser formatada.
Podemos, portanto, usar os mesmos especificadores de formato que usamos com oTIME_FORMAT()função no exemplo anterior. No entanto,DATE_FORMAT()não aceita umTIMEvalor, então precisaremos passar umDATETIMEvalor.
SELECT DATE_FORMAT('2023-01-01 10:07:30.007123', '%f');
Resultado:
+---------------------------------------------- ---+| DATE_FORMAT('2023-01-01 10:07:30.007123', '%f') |+---------------------------- ----------+| 007123 |+---------------------------------------------------------- --+
Passando apenas umTIMEvalue não funciona com esta função:
SELECT DATE_FORMAT('10:07:30.007123', '%f');
Resultado:
+--------------------------------------+| DATE_FORMAT('10:07:30.007123', '%f') |+--------------------------------- -----+| NULL |+--------------------------------------+1 linha no conjunto, 1 aviso ( 0,003 segundos)
Vejamos o aviso:
SHOW WARNINGS;
Resultado:
+---------+------+----------------------------- ----------------+| Nível | Código | Mensagem |+---------+------+------------------- ---------------+| Aviso | 1292 | Valor de data e hora incorreto:'10:07:30.007123' |+---------+------+-------------------- -------------------------+