2011-11-17 10 views
5

में केवल दिनांक घटक की तुलना करें मुझे समय के साथ एचक्यूएल फ़िल्टरिंग का उपयोग करके कुछ इकाइयों का चयन करने की आवश्यकता है। लेकिन मुझे समय के बिना केवल तारीख घटक की तुलना करने की आवश्यकता है। उदाहरण के लिए 1.1.2011 12.00 और 1.1.2011 13.20 बराबर होना चाहिए।एचक्यूएल

मैं क्या ऑपरेटर का उपयोग कर सकते हैं?

@Query("FROM Item item " + 
    "WHERE item.date [equality by date operator] :date ") 
List<Item> findByDate(@Param("date") Date date); 

उत्तर

8

आप डीबी विशिष्ट कार्यों कोई आपत्ति नहीं है, तो आप (Oracle एक उदाहरण के रूप का प्रयोग करके) यह करने के लिए सक्षम होगा।

@Query("FROM Item item WHERE trunc(item.date) = trunc(:date) ") 
List<Item> findByDate(@Param("date") Date date); 

आप क्योंकि OracleDialect एक StandardSQLFunction रूप trunc पंजीकृत करता है और Oracle की TRUNC एक तिथि के समय घटक को हटा कर सकती हैं।

+0

ओरेकल में त्रुटियों आप 'TRUNC (item.date, 'YYYY') कॉल कर सकते हैं से बचने के लिए' कुछ त्रुटियों से बचने के। –

9

आप डीबी विशिष्ट कार्यों मन करते हैं (और आप चाहिए) तो 2 तिथियों के साथ काम करते हैं:

    तारीख से
  1. = करने के लिए सेट करने के लिए समय के साथ तारीख = तिथि आधी रात
  2. करने के लिए सेट समय के साथ तारीख 23: 59: 59,999

तो दिनांकों क्वेरी = तारीख और < से तिथि करने के लिए> =

+0

मैं ऑरैक डीबी का उपयोग कर रहा हूं और मेरे लिए ट्रंक का उपयोग करने के लिए बेहतर है। हमारे उत्तर – hatesms

+3

ठीक के लिए टीएनएक्स लेकिन यदि आप एक इन-मेमोरी डीबी के साथ यूनिट परीक्षण करना चाहते हैं, जहां यह समर्थित नहीं है तो आप अटक जाएंगे। –

0
"Select col from Table t where t.date = CURRENT_DATE()" 

इसे आजमाएं।

संबंधित मुद्दे