No MySQL, você pode usar o
TIME_FORMAT()
função para formatar um valor de tempo. Esta função funciona exatamente como
DATE_FORMAT()
função, exceto que o valor só pode ser formatado em horas, minutos, segundos e microssegundos. Consulte a tabela na parte inferior deste artigo para obter uma lista de especificadores de formato que podem ser usados com essa função.
Sintaxe
A sintaxe fica assim:
TIME_FORMAT(time,format)
Onde
time
é o valor de tempo que você deseja formatar e format
é a string de formato (isso determina como o valor de hora é realmente formatado). Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar.
SELECT TIME_FORMAT('14:35:27', '%r') AS 'Result';
Resultado:
+-------------+ | Result | +-------------+ | 02:35:27 PM | +-------------+
Este exemplo usa o
%r
especificador de formato, que formata a hora como 12 horas (hh:mm:ss seguido por AM ou PM). Exemplo 2 – Formatação mais específica
Se o uso de um especificador de formato mais geral, como no exemplo anterior, não for adequado, existem vários outros especificadores de formato que podem ajudá-lo a criar o formato necessário.
Por exemplo, se você gosta do formato anterior, mas não quer que os segundos sejam retornados, você pode fazer isso:
SELECT TIME_FORMAT('14:35:27', '%h:%i %p') AS 'Result';
Resultado:
+----------+ | Result | +----------+ | 02:35 PM | +----------+
Exemplo 3 – 24 horas
Há também especificadores de formato para 24 horas. Aqui está a maneira mais fácil de formatar a hora usando 24 horas.
SELECT TIME_FORMAT('14:35:27', '%T') AS 'Result';
Resultado:
+----------+ | Result | +----------+ | 14:35:27 | +----------+
Exemplo 4 – Microssegundos
Aqui está um exemplo que inclui a parte dos segundos fracionários no resultado:
SELECT TIME_FORMAT('14:35:27', '%H:%i:%s.%f') AS 'Result';
Resultado:
+-----------------+ | Result | +-----------------+ | 14:35:27.000000 | +-----------------+
Claro, também podemos incluir microssegundos no valor de tempo inicial:
SELECT TIME_FORMAT('14:35:27.123456', '%H:%i:%s.%f') AS 'Result';
Resultado:
+-----------------+ | Result | +-----------------+ | 14:35:27.123456 | +-----------------+
Exemplo 5 – Tempo decorrido
O tipo de dados de hora não está limitado a 24 horas. Também pode ser usado para representar o tempo decorrido. Ao usar esta função para tempo decorrido, você deve estar ciente de como os especificadores de formato de hora funcionam com valores de hora fora do intervalo de 0 a 23.
A documentação do MySQL diz o seguinte:
Se o valor de hora contiver uma parte da hora maior que23
, o%H
e%k
especificadores de formato de hora produzem um valor maior que o intervalo normal de0..23
. Os outros especificadores de formato de hora produzem o módulo de valor de hora12
.
Segue um exemplo para demonstrar:
SELECT TIME_FORMAT('24:00:00', '%H %k %h %I %l') AS '24', TIME_FORMAT('48:00:00', '%H %k %h %I %l') AS '48', TIME_FORMAT('100:00:00', '%H %k %h %I %l') AS '100', TIME_FORMAT('500:00:00', '%H %k %h %I %l') AS '500';
Resultado:
+----------------+----------------+-----------------+-----------------+ | 24 | 48 | 100 | 500 | +----------------+----------------+-----------------+-----------------+ | 24 24 12 12 12 | 48 48 12 12 12 | 100 100 04 04 4 | 500 500 08 08 8 | +----------------+----------------+-----------------+-----------------+
Especificadores de formato
Os especificadores a seguir podem ser usados para especificar o formato de retorno. Estes são um subconjunto daqueles disponíveis com o
DATE_FORMAT()
função. O valor do formato deve começar com um sinal de porcentagem (%
). Especificador | Descrição |
---|---|
%f | Microssegundos (000000 ..999999 ) |
%H | Hora (00 ..23 ) |
%h | Hora (01 ..12 ) |
%I | Hora (01 ..12 ) |
%i | Minutos, numérico (00 ..59 ) |
%k | Hora (0 ..23 ) |
%l | Hora (1 ..12 ) |
%p | AM ou PM |
%r | Hora, 12 horas (hh:mm:ss seguido por AM ou PM ) |
%S | Segundos (00 ..59 ) |
%s | Segundos (00 ..59 ) |
%T | Horário, 24 horas (hh:mm:ss ) |
%% | Um literal % personagem |