5

年と月のみに基づいて(つまり、日を気にせずに)2つの日付を比較できるようにする必要があります。また、JAVAとHQLの日付も比較できる必要があります。

d1が以下であるかどうかを確認する必要があるとしましょうd2。これが私が試したことです:

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-09戻る必要trueがありますfalse2011 < 201210 !< 09

ORの代わりにを使用する場合AND、それはまだ間違っています:

  • 2013-01 LTE 2012-05戻る必要falseがありますtrue2013 !< 201201 < 05

では、どのように処理すればよいですか?お願いします、JAVAとHQLに必要です。

4

1 に答える 1

6

これは機能するはずです。

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

Javaについても同じです。

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

2回目のチェックを続けることもできますy1 <= y2が、少し冗長になります。

于 2012-09-18T12:10:04.280 に答える