MySQL - Conversão de tempo?
Autor: Eurai Criado: 14/08/2021 Atualizado: 15/08/2021
Neste artigo venho trazer exemplo de como executar essa conversão.
Para conversão é possível utilizar as funções Time_TO_sec() / sec_to_time()
Primeiro, é necessário converter o tempo para segundos, somar ela se necessário, em seguida retornar para data..
Resultado abaixo:
sec_to_time(sum(time_to_sec(total_time)))
É possível utilizar para saber a diferença entre duas datas.
Pegar a hora inicial e hora final, converter ambas para segundos. Subtrair ambas datas, assim obterá o resultado em segundo.
Com o resultado, converta novamente em hora.
- Ahhh Eurai, mas no meu banco eu armazei como float, no meu banco está com o valor "8,5", "2,26".
Segue exemplo de como converter nessa caso:
REPLACE(total_time,'.',':'),concat(REPLACE(total_time,'.',':'),':00'), TIME_TO_SEC(REPLACE(total_time,'.',':')) SUM(TIME_TO_SEC(REPLACE(total_time,'.',':'))), sec_to_time(SUM(TIME_TO_SEC(REPLACE(total_time,'.',':'))) ) // a Soma
E ainda não ficará correto. Pois, é possível que o "40" minutos seja reconhecido como "04", causando diferença. Segue abaixo o comando definitivo para a soma:
sec_to_time(SUM(TIME_TO_SEC(concat(REPLACE(CAST(total_time AS DECIMAL(4,2)),'.',':'),':00'))) )
Explicando o comando acima.
Primeiro é convertido para formatar o numero com duas casas decimais, CAST(total_time AS DECIMAL(4,2))
Em seguida utilizamos o replace, para trocar o "." para ":" REPLACE(resultado,'.',':')
No proximo comando, é utilizado o contat para adicionar o segundos: concat(resultado,':00')
Convertemos em seguida para segundos, TIME_TO_SEC(resultado)
Somamos todo o valor com a função SUM()
E por últimos, voltamos o segundo para tempo sec_to_time()
Durante meus testes, não precisou adicionar o contat (segundos).
Realize alguns testes na sua consulta.
Gostou? Compartilhe com seus amigos e deixe um comentário! 😎
Um abraço, e até a próxima