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

dúvida em select usando data


daviddominio

Pergunta

Olá a Todos,

estou com uma dúvida sobre um select, quero fazer um relatório por data de nascimento, somente o DIA E O MES ex.. todas as pessoas q fazem aniversário do dia 01 de julho a 29 de setembro, fiz o select abaixo porém ele não está respeitando a condição do between e retorna todos os dados.

SELECT NOME,DATE_FORMAT( DATA_NASCIMENTO, '%d-%m' ) AS DATA_NASCIMENTO FROM TB_PESSOA

WHERE DATA_NASCIMENTO BETWEEN '01-07' AND '29-09'

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Oi, 'daviddominio'!

Existe uma caracteríatica sobre datas que talvez você desconheça e, por isso, está acontecendo o erro .

Semanticamente, datas devem set tratadas como os números. Exemplo.: dado um número 386 sabemos que o próximo é 387 porque a unidade "gira" mais rápido que a dezena que "gira" mais rápido que a centena, etc.

Assim Avançamos ou retrocedemos um número "girando sua unidade, dezena, centena e etc.

Nas datas acontece do mesmo jeito, ouseja, dias "giram" mais rápido que meses que "giram" mais rápido que anos.

O Mysql sabendo disso já guarda a data numa forma que pode ser ordenada de maneira rápida (no caso ano,mes e dia)

Em seu exemplo você inverteu a seleção fazendo com que 31 de janeiro (31-01) ficasse depois de 29 de setembro (29-09).

A correção deste problema pode ser feita diretamente na cláusula where, conforme abaixo.

SELECT  NOME, DATE_FORMAT( DATA_NASCIMENTO, '%d-%m' ) AS DATA_NASCIMENTO FROM TB_PESSOA WHERE SUBSTRING(DATA_NASCIMENTO, 6, 5) BETWEEN '07-01' AND '09-29'[/quote]

Porém esta pesquisa nunca usará índices, ou seja, sempre será executada fazendo TABLE SCAN, que diminui a performance da tabela EXPONENCIALMENTE ao crescimento da mesma. Como sugestão, se esta for uma consulta importante, crie um atributo chamado MESDIA_ANIVERSARIO tipo char(5) (não adianta verchar os dados sempre terão o mesmo tamanho) para conter os dados do filtro de sua pesquisa.

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...