仅比较HQL中的日期组件

时间:2011-11-17 11:21:44

标签: hibernate hql

我需要按时间使用HQL过滤选择一些实体。但我需要在没有时间的情况下仅比较日期组件。例如1.1.2011 12.00和1.1.2011 13.20必须相等。

我可以使用哪种操作员?

@Query("FROM Item item " +
  "WHERE item.date [equality by date operator] :date " )
List<Item> findByDate(@Param("date") Date date);

3 个答案:

答案 0 :(得分:10)

如果您不介意特定于DB的功能,您可以这样做(以Oracle为例)。

@Query("FROM Item item WHERE trunc(item.date) = trunc(:date) " )
List<Item> findByDate(@Param("date") Date date);

您可以使用此方法,因为OracleDialect将trunc注册为StandardSQLFunction,Oracle的TRUNC删除日期的时间组件。

答案 1 :(得分:10)

如果你介意特定于数据库的功能(你应该),那么使用2个日期:

  1. 从日期=日期,时​​间设置为午夜
  2. 至日期=日期,时​​间设置为23:59:59.999
  3. 然后查询日期&gt; =从日期和&lt; =到日期

答案 2 :(得分:0)

"Select col from Table t where t.date = CURRENT_DATE()"

试试这个。