Com certa frequência é necessário fazer soma (e subtração) de datas no MySQL mas muitos programadores usam equivocadamente duas funções para tal: now() e curdate() e obtém resultados totalmente diferentes daquilo que estão esperando. Veja aqui como somar e/ou subtrair datas diretamente no banco de dados.
O uso destas funções podem trazer problemas enormes, como é o caso da soma de datas com curdate que extrapolam o calendário. Veja o exemplo abaixo com a soma da data atual mais 120 dias:
> SELECT CURDATE() + 120 > 20071326
(alguém conhece o mês 13 no calendário?)
O correto para a soma e subtração de datas é o uso das funções DATE_ADD e DATE_SUB que conseguem tratar quaisquer datas e retornar resultados corretos. Eis um exemplo:
> SELECT DATE_ADD(CURDATE(), INTERVAL 120 DAY); > 2008-04-04
Agora sim! Uma data coerente com o calendário gregoriano (4 de Abril de 2008) e que pode ser usada sem medo em qualquer sistema.
Mas porquê usar a função curdate ao invés de now?
A resposta é simples. Now() trás tanto a data quanto a hora, o que não ocorre com a função curdate(), que retorna para o usuário somente a data corrente do servidor, o que é mais indicado para cálculos que envolvam somente datas. Para a soma de horas, minutos e segundos, existem outras funções que fazem este trabalho mas serão comentadas em outro post.Com certa frequência é necessário fazer soma (e subtração) de datas no MySQL mas muitos programadores usam equivocadamente duas funções para tal: now() e curdate() e obtém resultados totalmente diferentes daquilo que estão esperando. Veja aqui como somar e/ou subtrair datas diretamente no banco de dados.
O uso destas funções podem trazer problemas enormes, como é o caso da soma de datas com curdate que extrapolam o calendário. Veja o exemplo abaixo com a soma da data atual mais 120 dias:
> SELECT CURDATE() + 120 > 20071326
(alguém conhece o mês 13 no calendário?)
O correto para a soma e subtração de datas é o uso das funções DATE_ADD e DATE_SUB que conseguem tratar quaisquer datas e retornar resultados corretos. Eis um exemplo:
> SELECT DATE_ADD(CURDATE(), INTERVAL 120 DAY); > 2008-04-04
Agora sim! Uma data coerente com o calendário gregoriano (4 de Abril de 2008) e que pode ser usada sem medo em qualquer sistema.
Mas porquê usar a função curdate ao invés de now?
A resposta é simples. Now() trás tanto a data quanto a hora, o que não ocorre com a função curdate(), que retorna para o usuário somente a data corrente do servidor, o que é mais indicado para cálculos que envolvam somente datas. Para a soma de horas, minutos e segundos, existem outras funções que fazem este trabalho mas serão comentadas em outro post.
Bom dia!!!
Gostaria de fazer uma conta com as datas, mais sendo
8/10/2009 a 7/04/2010 6horas de jornada
8/04/2010 a 31/08/2010 6 horas de jornada
obrigado
Carolina,
Descubra o intervalo de dias entre as datas e multiplique por 6 😉
Estou fazendo um exercicio de mysql na qual ele quer fazer um calculo para viajens de avião que sejam superior a 02 dias e trazer o resultado apenas nessa condição no caso como ficaria minha consulta ?
Consulta: Mostre os vôos, cidades origem e cidades destino para todos os vôos que durem mais do que 2 dias (considere somente a diferença de datas).
Ae no caso tenho minha tabelas:
Cidade (codigo, nome, população)
Vôo (número, cidade_destino, cidade_origem, distancia, data_partida, hora_partida,
datachegada, hora_chegada, preço, idAeronave) ,cidade_destino, cidade_origem= FK Cidade(código)
select cidade_origem, cidade_destino from voo, cidade where
(c.codigo=cidade_origem) and (SELECT data_partida(CURDATE(), INTERVAL 2 DAY);
ficaria assim ?
Parabéns pela dica amigo. Muito útil!