MySQL, Manipulando Datas (+ Horas)

MySQL

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

Todas as funções de Data e Hora.

About these ads

5 Comentários on “MySQL, Manipulando Datas (+ Horas)”

  1. Vinicius Cruz disse:

    Show! Vou aproveitar e me aprofundar mais nas funçoes do mysql =D

  2. Almir disse:

    Muito bom este tuto.

    obrigado.

  3. Diego disse:

    Muito bom mesmo. Parabéns

  4. Christian Costa disse:

    Olá, vejo muitos post’s sobre o assunto de manipulação de datetime em MYSQL.
    Na minha opinião, o seu é o melhor.
    Didática impecável.
    Muito Obrigado!!!!

    Christian Costa


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.