Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cadmiel

Aniversáriantes num intervalo de tempo

Recommended Posts

E aí galerinha...blz

gostaria de um help

o que está errado na minha condição sql

where concat_ws('-',year(now()),month(colaborador_data_nascimento),day(colaborador_data_nascimento))<=DATE_ADD(NOW(),INTERVAL 30 DAY) order by colaborador_data_nascimento asc

 

Essa instrução precisa me retornar todos os colaboradores que farão aniversário nos próximos 30 dias ou num intervalo de 30 dias.

 

O que está errado no meu sql ?

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Formate todas as datas como MMDD (mês/dia) e compare usando between.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É porque a função CONCAT_WS() retorna um tipo String e não Date, portanto podemos utilizar a função DATE() para converter o resultado para o tipo correto e, enfim, aplicar o filtro.

 

Ao filtrar desta forma ("<= DATE_ADD(NOW(),INTERVAL 30 DAY)"), você está filtrando inclusive, quem já fez aniversário, a sugestão do @Motta foi utilizar o BETWEEN para filtrar ENTRE duas datas, no caso de hoje até daqui 30 dias, por exemplo:

WHERE DATE( CONCAT_WS( '-', YEAR( CURDATE() ), MONTH( colaborador_data_nascimento ), DAY( colaborador_data_nascimento ) ) BETWEEN CURDATE() AND DATE_ADD( CURDATE(), INTERVAL 30 DAY )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas para isto os dois lados do where tem de estar no mesmo formato , mês e dia no formato MMDD , assim quem faz aniversario em 1/jfev vem 02/01 senão o between não funciona , o outro detalhe , em uma virada de ano não funcionaria se deveria fazer duas condicões

between 12/15 and 01/12 --nao
between 12/15 and 12/31 and
between  01/01 and 01/12 --sim

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

WHERE(    DATE(CONCAT(DATE_FORMAT(CURRENT_DATE,'%Y'),DATE_FORMAT(colaborador_data_nascimento,'-%m-%d'))) <= DATE_ADD(CURRENT_DATE,INTERVAL 1 MONTH))AND(    DATE(CONCAT(DATE_FORMAT(CURRENT_DATE,'%Y'),DATE_FORMAT(colaborador_data_nascimento,'-%m-%d'))) > CURRENT_DATE)

testa ae, n deu para replicar

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.