【发布时间】:2013-07-24 05:56:53
【问题描述】:
我有一张表,里面有一个TimeStamp 列。我想对该表执行一个查询,给出只检查该列上的日期而不是时间的条件。
如何在 HQL 中做到这一点?
假设我的列具有值 07/23/2013 04:40:59 PM,我想选择查询以仅检查 7/23/2013 并忽略时间。
【问题讨论】:
我有一张表,里面有一个TimeStamp 列。我想对该表执行一个查询,给出只检查该列上的日期而不是时间的条件。
如何在 HQL 中做到这一点?
假设我的列具有值 07/23/2013 04:40:59 PM,我想选择查询以仅检查 7/23/2013 并忽略时间。
【问题讨论】:
您可以在 HQL 中设置两个约束条件,一个指定大于或等于您搜索的开始日期,另一个指定小于第二天。
即
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(...)expressions
WHERE MONTH (timestampcol) = 7
AND DAY (timestampcol) = 23
AND YEAR (timestampcol) = 2013
在 Postgres 中,这被映射到 extract(field from timestamp) 函数
【讨论】:
Wilts C. from Table 其中to_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'
【讨论】:
如果您使用 oracle 作为 DBMS,您可以在 HQL 中使用 trunc(timestamp) 来丢弃时间戳的小时部分。
试试这个教程:Document
【讨论】:
Java 8
.setParameter("dateParameter", Date.valueOf(fullDate), TemporalType.TIMESTAMP)
地点:
日期是
java.sql.Date,fullDate 是java.time.LocalDate,并且 尝试比较的字段用@Temporal声明。
https://thoughts-on-java.org/persist-localdate-localdatetime-jpa/
【讨论】:
在 MySQL 中 HQL 可以是这样的:
where DATE_FORMAT(date_column,'MM/dd/yyyy') = :date
日期是“2013 年 7 月 23 日”
【讨论】: