2014-09-05 75 views
10

我必須比較hibernate hql查詢中的兩個日期。 我在我的java bean中使用java.util.Date,並在mysql數據庫中使用timestamp作爲數據類型。在沒有時間戳的HQL中比較日期

select t from Task t where t.modifiedDate > t.endDate; 

上面的查詢比較時間和日期。我應該如何在沒有時間的情況下比較上述查詢中的日期。

回答

13

參考Hibernate單證可用日期函數

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

在14.10節通知此行

second(...), minute(...), hour(...), day(...), month(...), and year(...) 

所以這應該工作

... where year(t.endDate) > year(t.startDate) 
    and month(t.endDate) > month(t.startDate) 
    and day(t.endDate) > day(t.startDate) 

解決方案報告爲滿意問題是

... where DATE(t.endDate) > (t.startDate) 
+0

這是給我用一個月和一年分別比較......但我有比較充分** **日期在像時間* * 06-09-2014 ** – 2014-09-06 05:57:18

+2

它適用於以下更改**其中DATE(t.endDate)>(t.startDate)** – 2014-09-19 14:19:16

+0

很高興爲您效勞。我正在用您的解決方案編輯答案,而不是將解決方案留在評論中。這是Stackoverflow做事的方式。 – carbontax 2014-09-19 22:14:54

0

提出的解決方案與date()功能似乎並不純SQL和(使用SQL Server)對我不起作用。最初的解決方案(單獨比較日,月和年)是朝着正確方向邁出的一步,但不能以這種方式完成,例如,對於未來的日期,如果一個月的日期不需要更長越大,等下面的SQL,但是,應該工作:

(year(t.endDate) > year(t.startDate)) 
or 
(year(t.endDate) = year(t.startDate) 
    and 
    month(t.endDate) > month(t.startDate)) 
or 
(year(t.endDate) = year(t.startDate) 
    and 
    month(t.endDate) = month(t.startDate) 
    and 
    day(t.endDate) > day(t.startDate))