Preciso fazer uma pesquisa dos usuários que irão fazer aniversário, mas não sei como faço, porque no banco de dados eles estão salvos como Date.
Quando quero pesquisar por data faço assim: WHERE data BETWEEN ? AND ?
Só que se usar isso vai considerar o ano que ele nasceu, e não vai retornar o que eu preciso.Tem como pesquisar usando apenas o dia e o mes?
Obs:Estou utilizando Hibernate
Ola rafael,
usando SQL sem hibernate é possivel usar um TO_CHAR(campo, ‘dd/mm’) e fazer a comparação.
por exemplo
select * from tabela where TO_CHAR(campo, 'dd/mm') = '13/03'
Isso no oracle. Em outros bds tb deve existir essa função ou alguma função similar.
Em caso de performance voce pode criar indices na sua tabela considerando a função já.
Abraços.
Não é bem isso que preciso, porque quero trabalhar ela como Dates não como char, porque nao quero comparar uma data, quero selecionar entre um periodo
[quote=RafaelViana]Preciso fazer uma pesquisa dos usuários que irão fazer aniversário, mas não sei como faço, porque no banco de dados eles estão salvos como Date.
Quando quero pesquisar por data faço assim: WHERE data BETWEEN ? AND ?
Só que se usar isso vai considerar o ano que ele nasceu, e não vai retornar o que eu preciso.Tem como pesquisar usando apenas o dia e o mes?
Obs:Estou utilizando Hibernate
[/quote]
Vc pode tentar fazer assim:
public List<SuaClasse>BuscarPorDiaEMes(Date dataInformada){
Calendar cal = Calendar.getInstance();
cal.setTime(dataInformada);
Integer dia = cal.get(Calendar.DAY_OF_MONTH);
Integer mes = cal.get(Calendar.DAY_OF_MONTH)
Query q = session.createQuery("SELECT a FROM SuaClasse a WHERE DAY(a.seuBeanData) = ? AND MONTH(a.seuBeanData) = ? " );
q.setInteger(0,dia);
q.setInteger(1,mes);
return q.list();
}