仅比较HQL中的日期组件

hat*_*sms 5 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);
Run Code Online (Sandbox Code Playgroud)

ben*_*y23 10

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

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

您可以使用它,因为OracleDialect注册truncStandardSQLFunction和Oracle TRUNC删除了日期的时间组件.


Sti*_*ens 10

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

  1. 从日期=日期,时​​间设置为午夜
  2. 到日期=日期,时​​间设置为23:59:59.999

然后查询日期> =从日期和<=到日期

  • 很好,但是如果你想用内存数据库进行单元测试,那么你就不会受到限制. (3认同)