我有一张包含TimeStamp
列的表格。我想在该表上执行一个查询,给出的条件是只检查该列上的Date而不是时间。
我怎么能在HQL中做到这一点?
假设我的列的值为07/23/2013 04:40:59 PM
,我想选择查询只检查7/23/2013
并忽略时间。
答案 0 :(得分:3)
您可以在HQL中添加两个约束,一个指定大于或等于您搜索日期的开头,另一个指定小于第二天。
即
table.timestamp >= 07/23/2013 AND table.timestamp < 07/24/2013
或
from Table where to_char(TimeStamp,'YYYY/MM/DD') = '2013/07/23'
答案 1 :(得分:0)
在MySQL中,HQL可以是:
where DATE_FORMAT(date_column,'MM/dd/yyyy') = :date
其中日期为'7/23/2013'
答案 2 :(得分:0)
另一种方法是使用DAY(...)
,MONTH(...)
,YEAR(...)
expressions
WHERE MONTH (timestampcol) = 7
AND DAY (timestampcol) = 23
AND YEAR (timestampcol) = 2013
在Postgres中,这被映射到extract(field from timestamp)函数
答案 3 :(得分:0)
表格中的Wilts C. 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'
答案 4 :(得分:0)
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/
答案 5 :(得分:0)
如果您将oracle用作DBMS,则可以在HQL中使用 trunc(timestamp)来丢弃时间戳的小时部分。
尝试本教程:Document