没有时间戳的 HQL 中的日期比较
Posted
技术标签:
【中文标题】没有时间戳的 HQL 中的日期比较【英文标题】:Date Compare in HQL without timestamp 【发布时间】:2014-10-30 01:46:57 【问题描述】:我必须在 hibernate hql 查询中比较两个日期。 我在我的 java bean 中使用 java.util.Date 并在 mysql 数据库中使用时间戳作为数据类型。
select t from Task t where t.modifiedDate > t.endDate;
以上查询将时间与日期进行比较。我应该怎么做才能在没有时间的情况下比较上述查询中的日期。
【问题讨论】:
【参考方案1】: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) )
【讨论】:
【参考方案2】:查看 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)
【讨论】:
这给了我分别与月份和年份的比较......但我必须像 06-09-2014 这样的时间比较完整日期 b> 它适用于以下更改 where DATE(t.endDate) > (t.startDate) 很高兴它对你有用。我正在使用您的解决方案编辑答案,而不是将解决方案留在 cmets 中。这就是 *** 的做事方式。 如果我们需要将日期作为名称参数而不是 t.startDate,那么查询将类似于 Date(t.endDate) @carbontax 是否允许在 hql 查询中使用“where DATE(t.endDate) > DATE(:currentDate)”。即使用带输入参数的 DATE()??以上是关于没有时间戳的 HQL 中的日期比较的主要内容,如果未能解决你的问题,请参考以下文章