2012-09-18 3 views
5

두 날짜를 비교할 수 있어야합니다. 예를 들어 일과 월을 기준으로 비교할 수 있어야합니다 (예 : 통보없이). JAVA 및 HQL.년을 기준으로 두 날짜를 비교합니다. 하루를 통보하지 않습니다.

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을 반환해야하지만이므로 false을 반환합니다. 064,903,210하지만

10 !< 09 내가 대신 ANDOR를 사용하는 경우, 그것은 여전히 ​​잘못 :

  • 2013-01 LTE 2012-05false를 반환해야하지만 돌아갑니다 true2013 !< 2012 있기 때문에 그래서

01 < 05 방법 처리해야합니까? 제발, 나는 자바와 HQL을 위해 그것을 필요로한다.

답변

6

이렇게하면됩니다. 자바에 대한 동일

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로 두 번째 검사를 유지할 수 있지만 약간의 중복이 될 것입니다.

+1

물론 사람이 맞습니다! 감사합니다';)' – sp00m

관련 문제