2016-06-16 7 views
13

से शुरू होने वाले डेटाबेस से सभी तारों का चयन करना मैं अपने डेटाबेस में सभी स्ट्रिंग्स का चयन करने की कोशिश कर रहा हूं जो रेगेक्सपी के साथ लोअरकेस अक्षर से शुरू होता है, लेकिन किसी कारण से यह अपरकेस अक्षर से शुरू होने वाले सभी तारों का चयन कर रहा है । मैं क्या गलत कर रहा हूं?लोअरकेस अक्षर

SELECT * 
FROM `allData` 
WHERE response REGEXP '^[a-z]' 
LIMIT 0 , 30 
+3

प्रति [डॉक्स] के रूप में (http://dev.mysql.com/doc/refman/5.7/en/regexp.html): 'regexp संवेदनशील, जब बायनरी तार के साथ प्रयोग किया, सिवाय ऐसा नहीं है। ' –

उत्तर

11
MySQL REGEXP manual से

:

regexp संवेदनशील, जब बायनरी तार के साथ प्रयोग किया, सिवाय ऐसा नहीं है।

आप इसलिए कुछ भाग्य हो सकता है पर उसके स्थान पर एक द्विआधारी स्ट्रिंग का उपयोग:

WHERE response REGEXP BINARY '^[a-z]' 

प्रदर्शन के लिए यथोचित मूर्खतापूर्ण बेला: http://sqlfiddle.com/#!9/7eade/3

संपादित करें: रे टिप्पणी में कहते हैं, तो आप चाहिए संभवतः सभी कॉलेशन में काम करने के लिए [[:lower:]] का उपयोग करें, उदाहरण के लिए

WHERE response REGEXP BINARY '^[[:lower:]]' 
+0

धन्यवाद। यह पूरी तरह से काम करता है। – frosty

+0

यदि यह आपके लिए काम करता है, तो कृपया स्वीकार किए जाने पर स्वीकार करें :) – slugonamission

+0

क्या आपको नहीं लगता कि '[[: निम्न:]]' चरित्र सेट और collations में '[a-z]' से अधिक सामान्य है? – Ray

1
SELECT * 
FROM allData 
WHERE LOWER(LEFT(response, 1)) <> LEFT(response, 1) 
LIMIT 0 , 30 

... हालांकि, इससे आपके MySQL character collation

2

मैं mysql के चरित्र वर्ग नाम का प्रयोग करेंगे REGEXP BINARY साथ संयोजन के रूप में मैच के लिए द्वारा सीमित किया जा सकता है:

WHERE response REGEXP BINARY '^[[:lower:]]' 

मैं डॉन ' टी पता है कि [a-z] प्रत्येक चरित्र सेट और संयोजन में समझ में आता है, जहां चरित्र वर्ग का नाम [:lower:] हमेशा निम्न से मेल खाता है एर केस अल्फा वर्ण।

0
select * from alldata where lower(left(response,1)) COLLATE Latin1_General_CS_AS =left(response,1) and response is not null and response<>'' 
संबंधित मुद्दे