Escrito em 06 de dez de 2007 em Desenvolvimento & PHP & Tutoriais

MySQL: Somando datas corretamente

0 Comentários

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.

Compartilhe ou Guarde:
  • Add to favorites
  • email
  • Print
  • PDF
  • Twitter
  • Digg
  • Facebook
  • LinkedIn
  • MySpace
  • Rec6
  • del.icio.us
  • Identi.ca
  • Google Bookmarks

Deixe um comentário

Contato

Algum comentário ou dúvida? Entre em contato!
paulino@michelazzo.com.br

Paulino Michelazzo

Fone : (11) 8715-2228

Sigam-me os bons