Problema:
Você gostaria de adicionar um determinado período de tempo a um valor de data e hora em um banco de dados MySQL.
Exemplo:
Nosso banco de dados tem uma tabela chamada
flight_schedule
com dados nas colunas flight
, aircraft
e arrival_datetime
. voo | aeronaves | arrival_datetime |
---|---|---|
EK10 | L1201 | 2019-04-20 15:15:00 |
AY12 | K2001 | 2019-03-31 20:10:00 |
LA105 | F205 | 2019-08-03 11:15:00 |
LH30 | K256 | 2019-07-01 12:47:00 |
Para cada voo, vamos obter o código do voo, o código da aeronave e uma nova data e hora de chegada. Para calcular o
new_arrival_datetime
, adicionaremos 2 horas e 10 minutos ao horário atual para cada chegada – é o quanto esses voos estão atrasados. Solução:
Usaremos o
ADDTIME()
função. Aqui está a consulta que você escreveria:SELECT flight, aircraft, ADDTIME(arrival_datetime, ‘2:10’) AS new_arrival_datetime FROM flight_schedule;
Segue o resultado da consulta:
voo | aeronaves | new_arrival_datetime |
---|---|---|
EK10 | L1201 | 2019-04-20 17:25:00 |
AY12 | K2001 | 2019-03-31 22:20:00 |
LA105 | F205 | 2019-08-03 13:25:00 |
LH30 | K256 | 2019-07-01 14:57:00 |
Discussão:
Use a função ADDTIME() se desejar selecionar um novo datetime adicionando um determinado horário a um valor datetime/timestamp/time.
Esta função recebe dois argumentos. O primeiro argumento é o datetime/time ao qual estamos adicionando o tempo; esta pode ser uma expressão que retorna um valor de hora/datahora/carimbo de hora ou o nome de uma coluna de hora/datahora/hora. Em nosso exemplo, usamos o
arrival_datetime
coluna, que é de datetime tipo de dados. O segundo argumento é uma string contendo a quantidade de tempo a ser adicionada ao primeiro argumento (no nosso exemplo, ‘2:10’, ou 2 horas e 10 minutos).
Você também pode adicionar segundos fracionários e até dias a um valor de data/hora. A consulta abaixo adiciona 3 dias, 1 hora, 1 minuto, 1 segundo e 111 segundos fracionários a uma data e hora:
SELECT ADDTIME('2019-02-05 10:12:11', '3 1:1:1.111');
Ele retorna:
2019-02-08 11:13:12.111000
ADDTIME() retorna uma string com a nova hora. Em nosso exemplo, o novo horário de chegada do voo 'EK10' é '2019-04-20 17:25:00' - duas horas e dez minutos após a data e hora original de
‘2019-04-20 15:15:00’.