Ir para conteúdo
Fórum Script Brasil
  • 0

Consulta em campo tipo date


alexandremanowar

Pergunta

E ae pessoal beleza

Eu tenho uma tabela com campo do tipo date e sei que para fazer uma consulta por exemplo apenas por mês eu faria da seguimte forma:

select * from tabela where MONTH(campo)=2;
Se fosse por ano por exemplo seria assim:
select * from tabela where YEAR(campo)=2003;

Porém eu gostaria de saber se é possível fazer a consulta por mês e ano por exemplo quero que me exiba todos os dados do mês 08-2004? Ou seja ao invés de busca só o mês ou o ano precisa que me exiba os dados do mês 8 de 2004, é possível?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'alexandremanowar',

Na resposta a sua questão, vou te oferecer umas dicas para uso com datas. Estas dicas estão entre as "melhores práricas" para lidar com datas no MySQL.

Você disse:

... e sei que para fazer uma consulta por exemplo apenas por mês eu faria da seguimte forma:

select * from tabela where MONTH(campo)=2;
Se fosse por ano por exemplo seria assim:
select * from tabela where YEAR(campo)=2003;

Porém eu gostaria de saber se é possível fazer a consulta por mês e ano por exemplo quero que me exiba todos os dados do mês 08-2004? Ou seja ao invés de busca só o mês ou o ano precisa que me exiba os dados do mês 8 de 2004, é possível?

Quando trabalhamos com atributos(campos) dentro da cláusula WHERE, devemos ter o cuidado especial de não usar funções no lado do atributo (tal como você fez). Este tipo de pesquisa sempre gera um TABLE SCAN (uma varredura em toda a tabela), ignorando os índices que por ventura existam e retardando em muito o tempo de resposta.

Respondendo a sua pergunta, o formato de data do MySQL é muito inteligente colocando primeiro o ano, depois o mes e, a seguir, o dia. Assim para fazer uma pesquisa por ano eu faço:

WHERE campo BETWEEN '2003-01-01' AND '2003-12-31'

Para pesquisar um mês eu uso

WHERE campo BETWEEN '2003-01-01' AND '2003-01-31'

Link para o comentário
Compartilhar em outros sites

  • 0
Olá,

Concordo com o Denis, mas se você quiser mesmo pode usar aquery abaixo:

select * from tabela where date_format(campodata,'%m/%Y')='08/2004'

Assim, além de você estar gerando um TABLE SCAN, não vai estar organizando naturalmente a data.

Outro método que tembém gera TABLE SCAN é

select * from tabela where YEAR(campo) = 2004 AND MONTH(campo) = 8

Não recomendo nenhuma destas opções neste post, se a tabela a ser utilizada possuir muitos registros.

Lembre-se o cliente sempre quer tudo para ontem. Não tranforme seu "tempo de resposta" em "prazo de entrega"

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...