我必须在hibernate hql查询中比较两个日期。 我在我的java bean中使用java.util.Date,并在mysql数据库中使用timestamp作为数据类型。
select t from Task t where t.modifiedDate > t.endDate;
以上查询将时间与日期进行比较。如何在没有时间的情况下比较上述查询中的日期。
答案 0 :(得分:16)
有关可用日期函数的信息,请参阅Hibernate文档
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html
在第14.10节中注意到这一行
second(...), minute(...), hour(...), day(...), month(...), and year(...)
所以这应该有用
... where year(t.endDate) > year(t.startDate)
and month(t.endDate) > month(t.startDate)
and day(t.endDate) > day(t.startDate)
报告的解决方案是满足问题
... where DATE(t.endDate) > (t.startDate)
答案 1 :(得分:0)
使用date()
函数的建议解决方案似乎不是纯SQL,并且对我不起作用(使用SQL Server)。原始解决方案(单独比较日,月和年)是朝着正确方向迈出的一步,但不能以这种方式完成,例如,对于将来的日期,如果月份不需要更大的日子然而,以下SQL应该可以工作:
( 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) )