Estou escrevendo sobre...
MySQL: Somando datas corretamente
Categorias:
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.
- Autentique-se ou crie uma conta para comentar
- Envie para um amigo








