2009-08-03 20 views
63

में केस को अनदेखा करता है, मैं एक SQL क्वेरी (एमएस एसक्यूएल सर्वर) कैसे बना सकता हूं जहां "कहां" खंड केस असंवेदनशील है?एसक्यूएल सर्वर एक अभिव्यक्ति

SELECT * FROM myTable WHERE myField = 'sOmeVal' 

मैं परिणाम मामले

उत्तर

103

SQL सर्वर डेटाबेस की डिफ़ॉल्ट कॉन्फ़िगरेशन में, स्ट्रिंग तुलना केस-असंवेदनशील हैं। यदि आपका डेटाबेस इस सेटिंग को ओवरराइड करता है (वैकल्पिक collation के उपयोग के माध्यम से), तो आपको यह निर्दिष्ट करना होगा कि आपकी क्वेरी में किस प्रकार का संयोजन उपयोग करना है।

SELECT * FROM myTable WHERE myField = 'sOmeVal' COLLATE SQL_Latin1_General_CP1_CI_AS 

ध्यान दें कि मैंने प्रदान किया गया संयोजन सिर्फ एक उदाहरण है (हालांकि यह संभवतः आपके लिए ठीक काम से अधिक होगा)। SQL सर्वर collations की एक और पूरी तरह से रूपरेखा here पाया जा सकता है।

2

क्या डेटाबेस तुम पर कर रहे हैं अनदेखी वापस आने के लिए करना चाहते हैं? एमएस एसक्यूएल सर्वर के साथ, यह डेटाबेस-व्यापी सेटिंग है, या आप COLLATE कीवर्ड के साथ प्रति-क्वेरी को ओवर-राइड कर सकते हैं।

25

आमतौर पर, स्ट्रिंग तुलना केस-असंवेदनशील होती है।

SELECT balance FROM people WHERE email = '[email protected]' 
    COLLATE SQL_Latin1_General_CP1_CI_AS 
+3

ऐसा लगता है कि कोई मेरे से तेज़ है :-) –

+4

+1 मुझे आपका संक्षिप्त (और स्क्रॉलबार-कम) उत्तर पसंद आया। –

4

आप केस संवेदी मजबूर कर सकते हैं, इस तरह एक varbinary के लिए कास्टिंग: अपने डेटाबेस संवेदनशील मिलान केस के लिए कॉन्फ़िगर है, तो आप एक केस संवेदी एक का उपयोग करने के लिए मजबूर करने की जरूरत है

SELECT * FROM myTable 
WHERE convert(varbinary, myField) = convert(varbinary, 'sOmeVal') 
+2

हालांकि यह कार्यात्मक है, यह एक सलाहकार दृष्टिकोण नहीं है। सॉर्टिंग और स्ट्रिंग तुलना प्रबंधन के लिए कॉलेशन हैं। –

+0

@AdamRobinson हालांकि "स्ट्रिंग तुलना" के बारे में नहीं है? – Fandango68

19

मैं कहीं और समाधान मिला; यानी

upper(@yourString) 

लेकिन यहां हर कोई यह कह रहा है कि, SQL सर्वर में, इससे कोई फर्क नहीं पड़ता क्योंकि यह किसी भी तरह से अनदेखा कर रहा है? मुझे यकीन है कि हमारा डेटाबेस केस-संवेदी है।

+4

आप सही हैं कि डेटाबेस को केस संवेदनशील बनाया जा सकता है, लेकिन यह बहुत अक्षम है, भले ही इसकी आवश्यकता हो। COLLATE उपयोग करने के लिए कीवर्ड है। – mjaggard

+1

इसे लाने के लिए धन्यवाद, @ mjaggard। मैं आशा करता हूं कि, या कोई भी जो मेरे उत्तर को कम करने लगता है, मेरे जैसे किसी के भी अच्छे के लिए विस्तृत है जो मेरे जैसे उत्तरों की खोज करता है और पाता है। – Danny

+1

इसे ऊपर उठाया क्योंकि यह एक पूरी तरह से तर्कसंगत स्पष्टीकरण है। बहुत अधिक ओवरहेड के टुकड़े टुकड़े करें और क्या होगा यदि आपकी स्ट्रिंग में वर्ण हैं कि collation समझ में नहीं आता है? लैटिन 1 एक लुसी एन्कोडिंग योजना है।शुभकामनाएं अर्थपूर्ण परिणाम प्राप्त कर रही हैं यदि आपकी स्ट्रिंग में एक एस्ट्रोफ़े है (जैसे: ओ'ब्रायन)। – eggmatters

5

नहीं, केवल LIKE का उपयोग नहीं करेगा। LIKE आपके दिए गए पैटर्न से मेल खाने वाले मूल्यों की खोज करता है। इस मामले में LIKE केवल टेक्स्ट 'ओमेवल' और 'कुछवल' नहीं मिलेगा।

एक प्राप्य समाधान LCASE() फ़ंक्शन का उपयोग कर रहा है। LCASE('sOmeVal') आपके टेक्स्ट की लोअरकेस स्ट्रिंग प्राप्त करता है: 'कुछवल'। आप अपनी तुलना के दोनों पक्षों के लिए इस सुविधा का उपयोग करते हैं, यह काम करता है:

SELECT * FROM myTable WHERE LCASE(myField) LIKE LCASE('sOmeVal')

बयान दो लोअरकेस तार तुलना, ताकि आपके 'sOmeVal' 'someval' (जैसे 'Someval के हर अंकन से मेल खाएगी ',' सोमेवल 'इत्यादि)।

+6

SQL सर्वर इंस्टॉलेशन के 99.9% में जो _CI को संकलित किया गया है, जैसे केस असंवेदनशील है। – RichardTheKiwi

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