JPA: Where com datas

6 respostas
rafagil

Olá,

Tenho uma classe que possui um campo do tipo date (Timestamp), e gostaria de recuperar todos os registros de um determinado dia. Porém, como o campo é do tipo timestamp, a hora também é gravada. Se eu fizer uma consulta normal (select c from compromissos c where data = :data), e passar uma data qualquer (sem hora), não consigo recuperar os rasultados.

Não sei se fui bem claro acima, mas, por exemplo, gostaria de fazer algo parecido com isso (SQL): Select * from compromissos where date(data) = ‘2007-09-17’. Ou seja, todos os registros que a Data for igual a da query, ignorando as horas.

Alguem sabe como fazer isso?

Obrigado

6 Respostas

Filipe_Portes

Ja tentou usar :

where data like ‘%2007-09-17%’

espero que de certo.

rafagil

Não dá certo não, porque o tipo de dado é Date e não String.

Ninguem sabe outra maneira?

ddduran

Cara, ja passei por isso e o que acabei tendo de fazer é criar um timestamp com a minha data e hora 00:00:00 e outro com hora 23:59:59
ai no seu where tem q ser

data>:ini AND data<:fim

mas acredito que não é a maneira mais elegante

cassio

Isso não é um problema da JPA, é algo que acontece com SQL em geral. Se vc tem um timestamp, gravado com segundos, milisegundos e tudo mais, não adianta querer usar operador de igualdade, provavelmente vai falhar na maioria das vezes.
Ou vc trunca o timestamp para um valor menos preciso usando um cast ou estabelece alguma tolerância e usa BETWEEN.
Na linguagem para query da JPA não sei como ficaria isso, mas com certeza deve ter algo equivalente ao SQL.

vhuzalo

Na classe POJO, vc deve usar a anotation

@Temporal(TemporalType.TIMESTAMP)

A query do jpa deve reconhecer que é deste tipo.

:thumbup:

joede.fadel

vc ja tentou usar o convert??

se ajudar a sintaxe sao essas

–horas 108 hh:mm:ss
convert(char(10),campo,108) = ‘10:00:00’

–mes 103 dd/MM/yyyy

convert(char(11),campo,103) = ‘25/07/2000’

–dia 106 dd mmm yyyy

convert(char(11),campo,106) = ‘10 mai 2007’

Criado 17 de setembro de 2007
Ultima resposta 2 de out. de 2007
Respostas 6
Participantes 6