2010-11-08 9 views
43

है, मैं एक SQL क्वेरी ढूंढ रहा हूं जो मुझे उन सभी पंक्तियों को देता है जहां कॉलमएक्स में कोई लोअरकेस अक्षर होता है (उदा। "1234aaaa5789")। अपरकेस के लिए वही।पंक्तियों को कैसे ढूंढें जिनमें लोअरकेस अक्षर

उत्तर

61
SELECT * FROM my_table 
WHERE UPPER(some_field) != some_field 

यह åäöøüæï की तरह अजीब अक्षर के साथ काम करना चाहिए। आपको तालिका के लिए भाषा-विशिष्ट यूटीएफ -8 संयोजन का उपयोग करने की आवश्यकता हो सकती है।

+15

यह असंवेदनशील डीबी के मामले में काम नहीं करता है, देवराज गधवी उत्तर से COLLATE लैटिन 1_General_CS_AS जोड़ना होगा –

+0

MySQL 5.6 में, 'लैटिन 1_General_CS_AS' ने एक त्रुटि उत्पन्न की। 'COLLATE latin1_general_cs' हालांकि काम किया। आपके द्वारा सामना किए जाने वाले मुद्दे पर अधिक जानकारी के लिए – kouton

+0

@ कूटन संपादित [मेरा उत्तर] (http://stackoverflow.com/a/14646445/1184435)। –

2
mysql> SELECT '1234aaaa578' REGEXP '^[a-z]'; 
+0

, आदि FYI करें a-z के अलावा कोई अन्य पात्रों के साथ काम नहीं करेंगे åäöøüæï तरह – geon

+1

। एक चरित्र के प्रकार का निर्धारण करते समय REGEXP और RLIKE वर्तमान वर्ण सेट का उपयोग करें। डिफ़ॉल्ट लैटिन 1 (सीपी 1252 वेस्ट यूरोपीय) है। चेतावनी आरईजीएक्सपी और रिलीके ऑपरेटर बाइट-वार फैशन में काम करते हैं, इसलिए वे बहु-बाइट सुरक्षित नहीं हैं और बहु-बाइट चरित्र सेट के साथ अप्रत्याशित परिणाम उत्पन्न कर सकते हैं। इसके अलावा, ये ऑपरेटर अपने बाइट मानों से वर्णों की तुलना करते हैं और उच्चारण वर्णों की तुलना बराबर की तुलना नहीं की जा सकती है, भले ही दिए गए संयोजन उन्हें समान मानते हैं। –

0

मैं एक विशेषज्ञ MySQL पर मैं तुम्हें REGEXP पर देखने के सुझाव है कि नहीं कर रहा हूँ।

SELECT * FROM MyTable WHERE ColumnX REGEXP '^[a-z]'; 
6

एमएस एसक्यूएल सर्वर में COLLATE क्लॉज का उपयोग करें।

SELECT Column1 
FROM Table1 
WHERE Column1 COLLATE Latin1_General_CS_AS = 'casesearch' 

COLLATE Latin1_General_CS_AS जोड़ना खोज केस संवेदनशील बनाता है।

SQL सर्वर स्थापना SQL_Latin1_General_CP1_CI_AS का डिफ़ॉल्ट संयोजन केस संवेदनशील नहीं है।

किसी भी तालिका के लिए स्थायी रूप से चलाने के लिए किसी भी तालिका के किसी भी कॉलम के संयोजन को बदलने के लिए।

ALTER TABLE Table1 
ALTER COLUMN Column1 VARCHAR(20) 
COLLATE Latin1_General_CS_AS 

संग्रहीत प्रक्रिया के बाद किसी भी तालिका चलाने के लिए कॉलम के संयोजन को जानने के लिए।

EXEC sp_help DatabaseName 

स्रोत: SQL SERVER – Collate – Case Sensitive SQL Query Search

32
SELECT * FROM my_table WHERE my_column = 'my string' 
COLLATE Latin1_General_CS_AS 

यह एक केस संवेदी खोज होगा।


संपादित

में kouton के comment here और tormuto के comment here जो भी नीचे मिलान के साथ समस्या का सामना कर रहा

COLLATE Latin1_General_CS_AS 

पहली बार अपने एसक्यूएल सर्वर के लिए default collation की जाँच करनी चाहिए कहा गया है, उनके संबंधित डेटाबेस और प्रश्न में कॉलम; और क्वेरी अभिव्यक्ति के साथ डिफ़ॉल्ट संयोजन में पास करें। Collations की सूची here पाया जा सकता है।

+2

यह अच्छी तरह से काम करता है। –

+0

यह एमएस एसक्यूएल में काम करता है। –

+0

यह मेरे सर्वर के phpmyadmin से काम नहीं किया; मुझे एक त्रुटि मिली: अज्ञात collation: 'Latin1_General_CS_AS'। इसलिए मुझे 'लैटिन 1_General_CS' के बजाय एक और उपलब्ध collation का उपयोग करना पड़ा और यह काम किया। – tormuto

15
SELECT * FROM Yourtable 
WHERE UPPER([column_NAME]) COLLATE Latin1_General_CS_AS !=[Column_NAME] 
9
खोज के लिए

छोटे अक्षरों में सभी पंक्तियों

SELECT * 
FROM Test 
WHERE col1 
LIKE '%[abcdefghijklmnopqrstuvwxyz]%' 
collate Latin1_General_CS_AS 

धन्यवाद Manesh Joseph

+0

मैंने तुलनात्मक स्ट्रिंग को राजधानियों में बदलने के बाद मेरी समस्या हल की। – sanepete

0

Posgresql में आप उदाहरण के लिए ~

इस्तेमाल कर सकते हैं यदि आप सभी पंक्तियों है कि किसी भी पत्र के साथ col_a है के लिए खोज सकते हैं लोअरकेस में

select * from your_table where col_a '[a-z]';

आप अपनी आवश्यकताओं के अनुसार रेगेक्स अभिव्यक्ति को संशोधित कर सकते हैं।

सादर,

0

मैं ColumnX को बायनरी को जोड़ने के लिए, परिणाम प्राप्त करने के लिए है केस संवेदी

SELECT * FROM MyTable WHERE BINARY(ColumnX) REGEXP '^[a-z]'; 
0

इस रूप में यह है कि मैंने इसे utf8 एन्कोडेड तालिका और utf8_unicode_ci कॉलम के लिए कैसे किया, w hich वास्तव में तैनात किया गया है प्रतीत नहीं होता:

SELECT * 
FROM table 
WHERE UPPER(column) != BINARY(column) 
संबंधित मुद्दे