Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

जेपीए मानदंड एपीआई का उपयोग कर स्ट्रिंग के लिए दिनांक फ़ील्ड कैसे खोजें?

ठीक है, विभिन्न रणनीतियों के साथ बहुत सारे प्रयोग करने के बाद, मैंने जो किया वह आखिरकार काम कर गया।

मैंने यह पोस्ट देखा यहां और अचानक जेपीए याद आ गया Tuple इंटरफ़ेस जो एक ऑब्जेक्ट है जो एकाधिक परिणाम प्रकार (ओं) को वापस कर सकता है। तो मेरा like करने के लिए तुलना, और चूंकि दिनांक को केवल एक स्ट्रिंग में नहीं डाला जा सकता है, यहां चरण हैं;

  1. मुझे कॉलम Tuple . के रूप में मिलता है
  2. टुपल ऑब्जेक्ट पर एक जांच करें कि यह दिनांक से असाइन करने योग्य है या नहीं
  3. यदि ऐसा है, तो दिनांक-प्रारूप व्यंजक प्राप्त करें और इसे like पर पास करें अभिव्यक्ति।

तो अनिवार्य रूप से, यहाँ मेरे पास शुरू में क्या था जो स्पष्ट रूप से विफल हो रहा था;

predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%")); 

अब, मेरे पास यही है जो खूबसूरती से काम करता है;

Path<Tuple> tuple = entity.<Tuple>get("dateJoined");
if(tuple.getJavaType().isAssignableFrom(Date.class)){
    Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("dateJoined"), cb.literal("'%d/%m/%Y %r'"));
    predicates.add(cb.like(cb.lower(dateStringExpr), "%"+search.toLowerCase()+"%"));
}

ध्यान देने योग्य विचार -

  1. मुझे पता है कि जहां से भी खोज शुरू की जाएगी, मेरी सभी तिथियां इस फॉर्म में प्रस्तुत की गई हैं 07/10/2015 10:25:09 PM इसलिए मेरे like . में तुलना के लिए दिनांक को प्रारूपित करने के बारे में जानने की मेरी क्षमता अभिव्यक्ति के रूप में "'%d/%m/%Y %r'"
  2. यह सिर्फ एक कदम है जो खजूर के लिए काम करता है। अधिकांश अन्य प्रकार जैसे int, long, char ... आदि ... सभी को सीधे स्ट्रिंग में कास्ट किया जा सकता है और जैसा कि मैं अधिक प्रकार के डेटा का पता लगाता हूं, मैं निश्चित रूप से किसी भी अन्य प्रकार के लिए ऐसा ही करूंगा जिसे सीधे स्ट्रिंग में कास्ट नहीं किया जा सकता है ।

हालांकि यह मेरे लिए पूरी तरह से काम करता है, लेकिन इससे पहले कि मैं इसे सही उत्तर के रूप में चिह्नित करूं, मैं इसे कुछ और व्यापक परीक्षणों के अधीन करने जा रहा हूं और इस प्रक्रिया में इसे किसी भी व्यक्ति की टिप्पणियों के लिए खुला रखता हूं, जिसे मेरी रणनीति के बारे में कोई आपत्ति है।

और अंत में, उस एक व्यक्ति को जिसने किसी भी तरह से मदद की... चीयर्स!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस से पूर्ण कैलेंडर जावास्क्रिप्ट में घटनाओं को पॉप्युलेट करना

  2. MySQL/Amazon RDS त्रुटि:आपके पास सुपर विशेषाधिकार नहीं हैं...

  3. MySQL क्वेरी के साथ निकटतम संख्यात्मक मान चुनें

  4. SQL तालिका बदलें - NULL कॉलम मान की अनुमति दें

  5. MYSQL - तिथियों के बीच टाइमस्टैम्प पुनर्प्राप्त करें