2016-07-11 107 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

相關問題