
Acompanho sempre a utilização do MySQL pelos articulistas, blogueiros, foruns entre outros, e sempre vejo perguntas relacionadas a datas (e horas), pensando nisso resolvi juntar algumas dicas básicas no tratamento de datas no mysql.
1. Campo Date e DateTime
Por definição o campo Date do MySQL é formado por: DIA-MÊS-ANO no formato 01-01-1984, se você não gosta desse formato se adeque a ele caso contrário irá render muitos problemas.
Seguindo a mesma lógica o DateTime é formado por: DIA-MÊS-ANO HORA:MINUTO:SEGUNDO, ou seja, é um campo Date com acréscimo do horário, ficaria com o formato 01-01-1984 01:01:01, utilizo muito quando algum campo meu tem repetidas inserções ao longo do dia, é uma forma de diferenciá-las, como no log de acesso.
2. Pesquisar por determinado dia, mês ou ano
O interessante é que poucas pessoas utilizam isso mais é bem simples, presume-se que você utiliza o campo Date ou DateTime.
select * from tabela where DAY(CampoData) = 2
A query acima indica que estamos procurando e exibindo todos registros em tabela onde oo dia for igual a 2 (dois) sendo que o dia será retirado do CampoData que é do tipo Date ou DateTime através da função DAY.
No caso do campo do tipo DateTime é possível também resgatar através das funções HOUR, MINUTE, SECOND os pedaços que representam a hora, minuto e segundo respectivamente.
A função DAY tem suas semelhantes para mês e ano que são MONTH() e YEAR()
3. Utilizei o campo do tipo VarChar para Data e agora ?
Mais qual o problema ? Simples, quando você precisar fazer uma consulta que a cláusula where seja o campo de data em varchar, voce terá problemas pois a comparação em tipo texto é feita da esquerda para a direita ou seja, 01/10/1984 será maior que 01/01/2008 pois 10 > 01, percebe-se que existe um campo Date então use ele, mais se voce já fez a burrada e atualizar o banco a essas horas seria custoso demais, seus problemas acabaram, o MySQL possui uma função nativa chamada STR_TO_DATE que é justamente para solucionar situações parecidas, vamos lá:
select * from tabela
where STR_TO_DATE(campoDataTexto, '%d/%m/%Y') > '1984-10-01'
O STR_TO_DATE ele converte o seu campo data no tipo varchar para o formato padrão do MySQL, repare que como argumento você deverá passar o formato que voce utilizou na sua data, no nosso caso temos %d/%m/%Y ou 01/01/2007, %d representa o dia com tamanho 2, %m representa o mês com tamanho 2, e %Y representa o ano por extenso com tamanho 4.
4. Data e Hora Atual
Existe duas funções do nível que eu utilizo muito, NOW (ou CURRENT_TIMESTAMP) e CURRENT_DATE (ou CURDATE)
NOW() : Retorna Data e Hora no formato DateTime de acordo com o time zone do MySQL.
CURRENT_DATE() : Retorna a Data no formato Date também de acordo com o time zone do MySQL.
Utilizando ambos:
insert into tabela (`data`,`dataHora`) values (CURRENT_DATE(),NOW())
Seguindo a lógica meu campo data é do tipo Date e meu campo DataHora é do tipo DateTime.
5. PHP
Na parte de PHP entram várias funções de entrada e saida de datas e hora, assunto vasto e cheio de funções fica para a próxima.
6. Referência
Show! Vou aproveitar e me aprofundar mais nas funçoes do mysql =D
[...] Fonte: NoDesign [...]
Muito bom este tuto.
obrigado.