2013-05-15 4 views
5

मैं जांचना चाहता हूं, अगर एक स्ट्रिंग केवल अपरकेस अक्षरों का रखती है। मुझे पता है कि RLIKE/REGEXP MySQL में केस संवेदनशील नहीं हैं। ,MySQL में अपरकेस अक्षरों की जांच कैसे करें?

SELECT 'z' REGEXP '^[[:upper:]]+$'; 

यह सच देता है, यद्यपि z, लोअर केस में है ... क्यों: तो मैं :upper: चरित्र वर्ग का उपयोग करने की कोशिश की?

उत्तर

4

संवेदनशील संयोजन के मामले में परिवर्तन, उदाहरण के लिए।

CHARACTER SET latin1 COLLATE latin1_general_cs 

तो इस क्वेरी की कोशिश,

SELECT 'z' REGEXP '^[A-Z]+$' 
+0

+1 का एक ही विचार था लेकिन लैटिन 1 चरित्र सेट – Stephan

+0

के साथ चाल को नहीं पता था, लेकिन चरित्र वर्ग क्यों काम नहीं करता है? क्योंकि मैं गलत collation का उपयोग कर रहा हूँ? 'ऊपरी:' क्यों जोड़ते हैं, जब 'ए-जेड' वही होता है, और ': ऊपरी:' ': निम्न: 'जैसा होता है जब संयोजन' * _ci' होता है? मैंने सोचा कि '* _ci' dafault देता है, लेकिन जब' ऊपरी: 'का उपयोग करते समय यह ऊपरी केस अक्षरों की तलाश करता है। Http://dev.mysql.com/doc/refman/5.0/en/regexp.html पर [: character_class:] के विवरण में यह कहता है कि मुझे 'ctype (3) 'के मैन्युअल पृष्ठों को देखना चाहिए। मैंने 'मदद ctype',' man ctype' की कोशिश की, ... कुछ भी काम नहीं किया –

+0

मैंने कोशिश की: 'चुनें' z 'RLIKE'^[AZ] $ 'COLLATE' utf8_general_cs ';', जिसने मुझे एक त्रुटि दी: 'ERROR 1273 (एचवाई 000): अज्ञात collation: 'utf8_general_cs''। आदेश 'SELECT' z 'RLIKE'^[A-Z] $ 'COLLATE' utf8_general_ci ';' ठीक काम करता है। तो मैं केस संवेदनशील संयोजन कैसे स्थापित कर सकता हूं? –

13

REGEXP is not case sensitive, except when used with binary strings.

http://dev.mysql.com/doc/refman/5.7/en/regexp.html

कि मन में साथ

तो, बस कुछ इस तरह करते हैं:

SELECT * FROM `users` WHERE `email` REGEXP BINARY '[A-Z]'; 

उपर्युक्त उदाहरण का उपयोग करके, आपको उन ईमेल की एक सूची मिल जाएगी जिनमें एक या अधिक अपरकेस अक्षर हों।

2

मेरे लिए यह काम करता है और regexp का उपयोग नहीं कर रहा है। यह मूल रूप से फ़ील्ड की तुलना अपने आप को mysql द्वारा स्वयं के साथ तुलना करता है।

-- will detect all names that are not in uppercase 
SELECT 
    name, UPPER(name) 
FROM table 
WHERE 
    BINARY name <> BINARY UPPER(name) 
; 
+0

यह एक अच्छा साफ समाधान है, धन्यवाद। –

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