Em alguns momentos pode ser importante estabelecer o tempo decorrido em um intervalo, de segundos, minutos, horas etc.
No MySQL, as funções TIME_TO_SEC e SEC_TO_TIME a fazer este cálculo.
Em um curto exemplo, veja como funciona a conversão de hora para segundos da função TIME_TO_SEC():
SELECT TIME_TO_SEC('00:00:36');
para tornar o resultado mais fácil de entender, usei um valor baixo e óbvio (trinta e seis segundos):
+-------------------------+
| TIME_TO_SEC('00:00:36') |
+-------------------------+
| 36 |
+-------------------------+
1 row in set (0.00 sec)
A partir daí, é possível encontrar outros valores.
Por exemplo, dividir o valor por 60, resulta no tempo decorrido em minutos.
Se o valor for dividido novamente por 60, teremos o tempo decorrido em horas.
Para obter o tempo decorrido em dias, acrescente mais uma operação de divisão – por 24, desta vez.
Veja um exemplo destas operações:
SELECT TIME(DataCadastroCliente) AS "Valor Original", TIME_TO_SEC(DataCadastroCliente) AS "Segundos", TIME_TO_SEC(DataCadastroCliente)/60 AS "Minutos", TIME_TO_SEC(DataCadastroCliente)/60/60 AS "Horas", TIME_TO_SEC(DataCadastroCliente)/60/60/24 AS "Dias" FROM CadastroClientes ORDER BY TIME(DataCadastrocliente) ASC LIMIT 10;
Note que ’21:30′ e ’22:30′ são traduzidos como ’21 minutos e meio’ e ’22 minutos e meio’:
+----------------+----------+----------+------------+----------------+ | Valor Original | Segundos | Minutos | Horas | Dias | +----------------+----------+----------+------------+----------------+ | 00:21:30 | 1290 | 21.5000 | 0.35833333 | 0.014930555556 | | 00:22:30 | 1350 | 22.5000 | 0.37500000 | 0.015625000000 | | 00:36:10 | 2170 | 36.1667 | 0.60277778 | 0.025115740740 | | 00:38:10 | 2290 | 38.1667 | 0.63611111 | 0.026504629629 | | 00:47:04 | 2824 | 47.0667 | 0.78444444 | 0.032685185185 | | 01:06:55 | 4015 | 66.9167 | 1.11527778 | 0.046469907407 | | 01:32:53 | 5573 | 92.8833 | 1.54805556 | 0.064502314815 | | 01:43:07 | 6187 | 103.1167 | 1.71861111 | 0.071608796296 | | 01:45:34 | 6334 | 105.5667 | 1.75944444 | 0.073310185185 | | 01:54:25 | 6865 | 114.4167 | 1.90694444 | 0.079456018518 | +----------------+----------+----------+------------+----------------+ 10 rows in set (0.00 sec)
Vamos melhorar a visualização deste resultado, com a função FLOOR()
A função FLOOR() retorna o maior valor inteiro, que não exceda o do argumento.
(Manual do MySQL).
É mais fácil entender com um exemplo:
SELECT TIME(DataCadastroCliente) AS "Valor Original", TIME_TO_SEC(DataCadastroCliente) AS "Segundos", FLOOR(TIME_TO_SEC(DataCadastroCliente)/60) AS "Minutos", FLOOR(TIME_TO_SEC(DataCadastroCliente))/(60*60) AS "Horas", FLOOR(TIME_TO_SEC(DataCadastroCliente))/(60*60*24) AS "Dias" FROM CadastroClientes ORDER BY TIME(DataCadastrocliente) ASC LIMIT 10;
+----------------+----------+---------+--------+--------+ | Valor Original | Segundos | Minutos | Horas | Dias | +----------------+----------+---------+--------+--------+ | 00:21:30 | 1290 | 21 | 0.3583 | 0.0149 | | 00:22:30 | 1350 | 22 | 0.3750 | 0.0156 | | 00:36:10 | 2170 | 36 | 0.6028 | 0.0251 | | 00:38:10 | 2290 | 38 | 0.6361 | 0.0265 | | 00:47:04 | 2824 | 47 | 0.7844 | 0.0327 | | 01:06:55 | 4015 | 66 | 1.1153 | 0.0465 | | 01:32:53 | 5573 | 92 | 1.5481 | 0.0645 | | 01:43:07 | 6187 | 103 | 1.7186 | 0.0716 | | 01:45:34 | 6334 | 105 | 1.7594 | 0.0733 | | 01:54:25 | 6865 | 114 | 1.9069 | 0.0795 | +----------------+----------+---------+--------+--------+ 10 rows in set (0.00 sec)
One reply on “Como converter horas em segundos, minutos, dias e vice-versa no MySQL”
Professor, como faço para ter o resultado sem milisegundos no caso da hora?
O retorno da média traz em 05:12:33.44000
Gostaria de trazer apenas 05:12:33