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.
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)
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) )