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
ironijunior
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 06 Jun 2012 4:48 pm

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.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

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.
ironijunior
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 06 Jun 2012 4:48 pm

Sim, eu desconsidero o ano.

Selecionar tudo

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 :?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

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

Selecionar tudo

  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
ironijunior
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 06 Jun 2012 4:48 pm

Ah, agora funcionou :D

Muito obrigado pela ajuda!
Rafael_Santos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 72
Registrado em: Sex, 18 Nov 2011 4:51 pm

TO_CHAR não faz comparação, era só usar TO_DATE
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

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.
Rafael_Santos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 72
Registrado em: Sex, 18 Nov 2011 4:51 pm

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

Obrigado pela explicação Noctifero
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes