2012-09-18 19 views
5

2つの日付を比較できるようにする必要があります。年と月のみに基づいて(すなわち、日にちに注意しないで)、JAVAとHQL。年月に基づいて2つの日付を比較します。日の通知なし

たとえば、d1d2以下であるかどうかを確認する必要があるとします。このアルゴリズムは、上記のコードの両方の部分では同じである

JAVA

calendar.setTime(d1); 
int y1 = calendar.get(Calendar.YEAR); 
int m1 = calendar.get(Calendar.MONTH); 
calendar.setTime(d2); 
int y2 = calendar.get(Calendar.YEAR); 
int m2 = calendar.get(Calendar.MONTH); 
return y1 <= y2 && m1 <= m2; 

HQL

select item from Item item 
where year(item.d1) <= year(:d2) 
and month(item.d1) <= month(:d2) 

が、それは間違っている:ここに私が試したものです

  • 2011-10 LTE 2012-09trueを返す必要がありますが、が返されます。しかし10 !< 09

私が代わりにANDORを使用している場合、それはまだ間違っている:

  • 2013-01 LTE 2012-05はどのように、falseを返す必要がありますが、そうtrue
  • 2013 !< 2012ので、しかし 01 < 05

を返します。私は処理すべきですか?私はJAVAとHQLのためにそれが必要です。

答えて

6

これは機能するはずです。 Javaのための同じ

select item from Item item 
where year(item.d1) < year(:d2) or 
    (year(item.d1) = year(:d2) 
     and month(item.d1) <= month(:d2)) 

y1 < y2 || (y1 == y2 && m1 <= m2) 

あなたはy1 <= y2として第2のチェックを保つことができるが、それは少し冗長になります。

+1

男、もちろん、あなたは正しいです!ありがとう ';)' – sp00m

関連する問題