没有时间戳的HQL中的日期比较

时间:2014-09-05 06:59:46

标签: mysql hibernate date datetime hql

我必须在hibernate hql查询中比较两个日期。 我在我的java bean中使用java.util.Date,并在mysql数据库中使用timestamp作为数据类型。

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

以上查询将时间与日期进行比较。如何在没有时间的情况下比较上述查询中的日期。

2 个答案:

答案 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) )