SELECT para aniversariantes entre duas datas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qua, 30 Jan 2013 10:57 am

Olá amigos,

estou fazendo um relatório de aniversariantes, no entanto preciso que mostre os aniversariantes entre duas datas. Se as duas datas forem dentro do mesmo ano fica tudo certo, o problema é quando tenho datas em anos diferentes.
Ex.:
01/12/2012 e 29/01/2013.

Como teria que ficar meu select para que quando houvessem casos assim, me mostrasse os aniversariantes entre essas duas datas.
ironijunior

Mensagemem Qua, 30 Jan 2013 11:17 am

Quando funciona, num mesmo ano, sua comparação de datas, você desconsidera o ano ???
Deve ser isso, se desconsiderar o ano quando faz o filtro entre 2 anos, acaba sendo uma consulta "de volta para o futuro" :P.
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Qua, 30 Jan 2013 12:49 pm

Sim, eu desconsidero o ano.

Código: Selecionar todos
SELECT *
  FROM funcionarios f
WHERE to_char(f.data_nascimento, 'MM/DD') BETWEEN to_char(:p_data_ini, 'MM/DD')
                                              AND to_char(:p_data_fin, 'MM/DD');


Já tentei considerando o ano, no entanto, não funcionou :?
ironijunior

Mensagemem Qua, 30 Jan 2013 5:07 pm

Considerando o ano(os parametros informados são DATA com dia/mês/ano), tenta assim:

Código: Selecionar todos
  AND TO_DATE(to_char(f.data_nascimento, 'DD/MM/') || to_char(:p_data_ini, 'RRRR'),'DD/MM/RRRR') >= :p_data_ini
  AND TO_DATE(to_char(f.data_nascimento, 'DD/MM/') || to_char(:p_data_fin, 'RRRR'),'DD/MM/RRRR') <= :p_data_fin
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Qui, 31 Jan 2013 8:31 am

Ah, agora funcionou :D

Muito obrigado pela ajuda!
ironijunior

Mensagemem Seg, 04 Fev 2013 5:32 pm

TO_CHAR não faz comparação, era só usar TO_DATE
Rafael_Santos

Mensagemem Ter, 05 Fev 2013 8:11 am

Rafael_Santos escreveu:TO_CHAR não faz comparação, era só usar TO_DATE


A comparação com to_char() não funciona nesse caso, mas também um simples to_date() não resolveria, pois os aniversários das pessoas compreendem vários anos, mesmo que sejam no mesmo dia/mês o aniversário.
Como saber se alguém de '01/01/1980' e outra de '01/01/1985' fazem aniversário em janeiro?de que ano seria a comparação?
Enfim.
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Ter, 05 Fev 2013 1:14 pm

Tem razão, não tinha me atentado a exclusão do ano.

Obrigado pela explicação Noctifero
Rafael_Santos


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem