2012-09-18 17 views
5

no'lu haber bültenine bakmayın. Sadece iki yıla kıyasla, sadece yılın ve aya göre (yani güne dair haber verilmeksizin), JAVA ve HQL.İki ayı bir önceki yılın aynı ayına göre karşılaştırın,

d1'un d2'dan küçük veya eşit olup olmadığını kontrol etmem gerektiğini varsayalım. Algoritma Yukarıdaki kodun her iki parça halinde aynıdır

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) 

, ama yanlış: Burada denedim budur

  • 2011-10 LTE 2012-09true dönmelidir, ancak false dönecektir, çünkü 2011 < 2012 ancak

10 !< 09 yerine bir AND bir OR kullanırsanız, hala yanlış:

  • 2013-01 LTE 2012-05false dönmelidir ama dönecektir true2013 !< 2012 çünkü Yani

01 < 05, nasıl işlem yapmalı mıyım Lütfen, JAVA ve HQL için buna ihtiyacım var.

cevap

6

Çalışması gerekir. Java için aynı

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) 

Sen y1 <= y2 olarak ikinci kontrol tutmak olabilir ama biraz gereksiz olacaktır.

+1

Elbette haklısınız! Teşekkürler ';)' – sp00m