2016-07-11 135 views
1

我正在使用HQL从现在起21天内完全插入数据。这里是我的代码如何从HQL查询中减去当前日期的天数

Query queryThreeWeek = session.createQuery("from Users where createdDate = CURDATE()-21"); 
List<Users> userDetailsThreeWeekList = queryThreeWeek.list(); 

我不能使用createSQLQuery。 现在我没有收到任何数据,但是有数据为2016-06-20。这是因为当月改变了,因为当我使用CURDATE()-7时,我得到了日期2016-07-04的正确数据。 dat的计算就像;

2016-07-11 - 7 = 20160704 
2016-07-11 - 21 = 20160690 
我也使用 INTERVAL其是用于 native sqlQuery

。这是我在HQL使用INTERVAL代码:

Query queryThreeWeek = session.createQuery("from Users where createdDate = DATE(DATE_SUB(NOW() , INTERVAL 21 DAY))"); 
List<Users> userDetailsThreeWeekList = queryThreeWeek.list(); 

也试过

Query queryThreeWeek = session.createQuery("from Users where createdDate = DATE(DATE_SUB(CURDATE() , INTERVAL 21 DAY))"); 
List<Users> userDetailsThreeWeekList = queryThreeWeek.list(); 

,但它给我的异常,如:org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: 21

那么我可以用什么来代替减去这样的日子:CURDATE()-21?在HQL只有

回答

1

我已经解决了这个问题。

Query sub3Week = session.createSQLQuery("select DATE(DATE_SUB(CURDATE() , INTERVAL 21 DAY)) from dual"); 
List<Date> sub3WeekList = sub3Week.list(); 

然后我在HQL查询中使用这个数据是这样的:

Query queryThreeWeek = session.createQuery("from Users where createdDate = :createdDate"); 
queryThreeWeek.setParameter("createdDate", sub3WeekList.get(0).toString()); 
List<Users> userDetailsThreeWeekList = queryThreeWeek.list(); 
1

您可以通过使用一个本地的SQL查询,可以让我的确切日期使用DATE_SUB

"from Users where createdDate = DATE(DATE_SUB(NOW() , INTERVAL 21 DAY))" 
+1

我得到意外的标记:21 – Shivam

+0

我在MySQL的测试这样的,似乎是正确的 选择DATE(DATE_SUB (CURDATE(),INTERVAL 21 DAY)); – scaisEdge

+0

但这不是我正在做的方式,我得到的是:org.hibernate.hql.internal.ast.QuerySyntaxException:意外的令牌:21 – Shivam

相关问题