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%f
especificador 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$s
ou$S
especificador 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 emnull
ou0
sendo 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 umTIME
valor, então precisaremos passar umDATETIME
valor.
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 umTIME
value 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' |+---------+------+-------------------- -------------------------+