Como converter horas em segundos, minutos, dias e vice-versa no MySQL

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)

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como “Rick and Morty” e “BoJack Horseman”.
Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *