web-dev-qa-db-fra.com

Date Comparer en HQL sans horodatage

Je dois comparer deux dates dans une requête hibernate hql. J'utilise Java.util.Date dans mon bean Java et utilise timestamp comme type de données dans la base de données mysql.

select t from Task t where t.modifiedDate > t.endDate;

La requête ci-dessus compare l'heure à la date. Que dois-je faire pour comparer la date dans la requête ci-dessus sans temps.

11
Sanket Dosi

Voir la documentation Hibernate pour les fonctions de date disponibles

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

Dans la section 14.10, notez cette ligne

second(...), minute(...), hour(...), day(...), month(...), and year(...)

Donc, cela devrait fonctionner

... where year(t.endDate) > year(t.startDate) 
    and month(t.endDate) > month(t.startDate)
    and day(t.endDate) > day(t.startDate)

La solution indiquée comme satisfaisant à la question est

 ... where DATE(t.endDate) > (t.startDate)
16
carbontax

La solution proposée avec la fonction date() ne semble pas être du SQL pur et ne fonctionne pas pour moi (avec SQL Server). La solution initiale (comparer jour, mois et année individuellement) est un pas dans la bonne direction, mais ne peut pas être réalisée de cette manière, car, par exemple, pour qu'une date soit future, un jour n'a pas besoin d'être plus grand si le mois est supérieur, etc. Le code SQL suivant devrait cependant fonctionner:

( year(t.endDate) > year(t.startDate) )
or 
( year(t.endDate) = year(t.startDate) 
  and 
  month(t.endDate) > month(t.startDate) )
or 
( year(t.endDate) = year(t.startDate) 
  and
  month(t.endDate) = month(t.startDate) 
  and
  day(t.endDate) > day(t.startDate) )
0
kundwiramurs