2013-07-23 3 views
5

मुझे समस्या है - मुझे एबीसी (छोटे बी, दो कैपिटल अक्षरों के बीच) जैसे प्रत्येक वाक्यांश को खोजने की आवश्यकता है। उदाहरण के लिए एक कथन: लिटिल जॉन के पास ProBlEm था और यह जानने की आवश्यकता है कि टीएचआईएस कैसे करें।दो पूंजी अक्षरों के बीच छोटा अक्षर ढूंढना - MySQL

मुझे ProBlEm और tHiS (आप देखते हैं, BlE और HiS, दो पूंजी के बीच एक छोटा अक्षर) चुनने की आवश्यकता है। मैं इसे कैसे चुन सकता हूं?

+0

"हर एक वाक्यांश" जहां प्रत्येक पुनर्प्राप्त शब्द खोज? कहीं भी आपके डेटाबेस में? – Jon

उत्तर

1

MySQL में आप उन रिकॉर्ड है कि इस तरह के एक पैटर्न होते हैं के लिए फिल्टर करने के लिए एक द्विआधारी (केस संवेदनशीलता सुनिश्चित करने के लिए) रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं:

WHERE my_column REGEXP BINARY '[[:upper:]][[:lower:]][[:upper:]]' 

हालांकि, यह इतना निकालने के लिए सरल नहीं है सबस्ट्रिंग्स जो MySQL के भीतर से इस तरह के एक पैटर्न से मेल खाते हैं। एक एक यूडीएफ का उपयोग कर सकता है, उदा। lib_mysqludf_preg, लेकिन शायद यह आपके कार्य परत के भीतर प्रदर्शन करने के लिए अधिक उपयुक्त है। किसी भी मामले में, नियमित अभिव्यक्ति फिर से इस कार्य को सरल बनाने में मदद कर सकती हैं।

+0

[mysql मैन्युअल] (http://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp) से इस चेतावनी से अवगत रहें: "REGEXP और RLIKE ऑपरेटर बाइट-वार फैशन में काम करते हैं , इसलिए वे बहु-बाइट सुरक्षित नहीं हैं और बहु-बाइट चरित्र सेट के साथ अप्रत्याशित परिणाम उत्पन्न कर सकते हैं। " – mabi

+0

मेरी गलती, सबकुछ काम करता है! धन्यवाद! –

+0

बस एक शाब्दिक 'ई' पर्याप्त होना चाहिए। – mabi

0

सबसे पहले आपने स्ट्रिंग को विभाजित कर दिया है। Please refer this SO Question

और उसके बाद की तरह

substring(word,2) LIKE '[A-Z]' COLLATE latin1_general_cs 
संबंधित मुद्दे