2012-09-18 27 views
5

की कोई सूचना नहीं लेना मुझे दो तिथियों की तुलना करने में सक्षम होना चाहिए, केवल वर्ष और महीने (यानी दिन की सूचना के बिना), और जावा में और HQL।वर्ष के आधार पर दो तिथियों की तुलना करें,

मान लें कि मुझे यह जांचने की आवश्यकता है कि d1d2 से कम या बराबर है या नहीं। एल्गोरिथ्म ऊपर कोड के दोनों टुकड़ों में ही है HQL

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

जावा

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; 

है, लेकिन यह गलत है:: यहाँ मैं क्या करने की कोशिश की है

  • 2011-10 LTE 2012-09true वापस करना चाहिए लेकिन false वापस करेगा क्योंकि 2011 < 2012 लेकिन 10 !< 09

अगर मैं एक AND के बजाय एक OR उपयोग करते हैं, यह अभी भी गलत है:

  • 2013-01 LTE 2012-05false लौटना चाहिए लेकिन वापस आ जाएगी true क्योंकि 2013 !< 2012 लेकिन 01 < 05

तो, क्या मुझे प्रक्रिया करनी चाहिए? कृपया, मुझे जावा और एचक्यूएल के लिए इसकी ज़रूरत है।

उत्तर

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