Como fazer cálculos com MySQL

Como adicionar mais tempo a outra variável de tempo no MySQL

Você já tem uma variável ou um campo com um valor de tempo, definido em horas, minutos e segundos. O que você quer é adicionar valores a esta variável temporal — alguns segundos, minutos, horas ou dias a mais.
Uma das formas de resolver este problema e usar as funções de conversão do MySQL: TIME_TO_SEC() e SEC_TO_TIME().
Nesta abordagem, vamos usar TIME_TO_SEC() para ter certeza de que todos os valores envolvidos estão em segundos. Então, fazemos as operações aritméticas, cujos resultados serão apresentados em unidades de segundos.
Enfim, vamos usar a função SEC_TO_TIME() para converter de volta a valores temporais (de hora).
Tomemos como exemplo que 3 horas são equivalentes a (3*60*60) 10800 segundos — cada hora, possui 3600 segundos.
Ao adicionar mais uma hora (3600 seg.) a este valor, temos 14400 segundos.
Para transformar o valor resultante em um horário legível, usamos a função SEC_TO_TIME().
No exemplo prático, abaixo, vou mostrar como somar 3 horas ao horário original, constante nos campos de uma tabela>

SELECT TIME(DataCadastroCliente) AS "Horário original",
    -> SEC_TO_TIME(TIME_TO_SEC(DataCadastroCliente)+10800) as "Horário +3 horas"
    -> FROM CadastroClientes LIMIT 5;
+-------------------+-------------------+
| Horário original  | Horário +3 horas  |
+-------------------+-------------------+
| 10:03:39          | 13:03:39          |
| 21:44:49          | 24:44:49          |
| 11:58:30          | 14:58:30          |
| 20:52:29          | 23:52:29          |
| 09:43:57          | 12:43:57          |
+-------------------+-------------------+
5 rows in set (0.00 sec)

Como somar dois valores expressos em horas no MySQL

Se você tem dois valores temporais expressos em horas, é necessário converter ambos para segundos, antes de somá-los.
Veja um exemplo:

SELECT HoraChegada, TempoPerm
    -> SEC_TO_TIME(TIME_TO_SEC(HoraChegada) + TIME_TO_SEC(TempoPerm)) AS 'Hora + Tempo'
    -> FROM CheckIn;
+-------------+-----------+--------------+
| HoraChegada | TempoPerm | Hora + Tempo |
+-------------+-----------+--------------+
|    15:00:00 |  15:00:00 |     30:00:00 |
|    05:01:30 |  02:30:20 |     07:31:50 |
|    12:30:20 |  17:30:45 |     30:01:05 |
+-------------+-----------+--------------+

Note que valores temporais no MySQL (MySQL TIME values) não representam os horários no dia. Na verdade, estes valores se referem a tempo decorrido — por isto não zeram após as 24 horas.
Use um operador de módulo para chegar ao resultado desejado, neste caso:

SELECT HoraChegada, TempoPerm
    -> SEC_TO_TIME(MOD(TIME_TO_SEC(HoraChegada) + TIME_TO_SEC(TempoPerm), 86400) AS 'Hora + Tempo'
    -> FROM CheckIn;

Note que o valor 86400, usado acima, é o número de segundos contido dentro das 24 horas de um dia. No meu caso, esta query vai retornar o seguinte resultado:

+-------------+-----------+--------------+
| HoraChegada | TempoPerm | Hora + Tempo |
+-------------+-----------+--------------+
|    15:00:00 |  15:00:00 |     06:00:00 |
|    05:01:30 |  02:30:20 |     07:31:50 |
|    12:30:20 |  17:30:45 |     06:01:05 |
+-------------+-----------+--------------+

No MySQL, os valores TIME se delimitam entre -838:59:59 e 838:59:59 — o que corresponde a -3020399 a
3020399 segundos.
Se você tentar armazenar valores fora desta faixa, o MySQL vai simplesmente cortar o que estiver ultrapassando os limites do permitido.

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 *