我有一张桌子,TimeStamp
里面有一列。我想对该表执行一个查询,给出只检查该列上的日期而不是时间的条件。我怎样才能在 HQL 中做到这一点?
假设我的列具有价值07/23/2013 04:40:59 PM
,我想选择查询以仅检查7/23/2013
并忽略时间。
您可以在 HQL 中添加两个约束,一个指定大于或等于您搜索的开始日期,另一个指定小于第二天。
IE
table.timestamp >= 07/23/2013 AND table.timestamp < 07/24/2013
或者
from Table where to_char(TimeStamp,'YYYY/MM/DD') = '2013/07/23'
另一种方法是使用DAY(...)
, MONTH(...)
,YEAR(...)
表达式
WHERE MONTH (timestampcol) = 7
AND DAY (timestampcol) = 23
AND YEAR (timestampcol) = 2013
在 Postgres 中,这被映射到extract(field from timestamp)函数
如果您将 oracle 用作 DBMS,则可以在 HQL 中使用trunc(timestamp)来丢弃时间戳的小时部分。
试试这个教程:文档
爪哇 8
.setParameter("dateParameter", Date.valueOf(fullDate), TemporalType.TIMESTAMP)
在哪里:
Date 是
java.sql.Date
,fullDate 是java.time.LocalDate
,并且试图比较的字段是用 声明的@Temporal
。
https://thoughts-on-java.org/persist-localdate-localdatetime-jpa/
Wilts C. from Tableto_char(TimeStamp,'YYYY/MM/DD') = '2013/07/23'
正确答案在哪里。其他答案与 HQL 无关,也没有解决如何格式化日期输入以在 HQL 中进行比较。
我没有足够的声望来投票。HQL 将接受日期字符串输入(注意 SQL 注入)并将其与您的列日期字符串格式进行比较。另一个例子:to_char(surveyDate,'YYYY/MM/DD') between '2000/09/23' and '2015/07/23'
在 MySQL HQL 中可以是这样的:
where DATE_FORMAT(date_column,'MM/dd/yyyy') = :date
其中日期是“2013 年 7 月 23 日”