में केस को अनदेखा करता है, मैं एक SQL क्वेरी (एमएस एसक्यूएल सर्वर) कैसे बना सकता हूं जहां "कहां" खंड केस असंवेदनशील है?एसक्यूएल सर्वर एक अभिव्यक्ति
SELECT * FROM myTable WHERE myField = 'sOmeVal'
मैं परिणाम मामले
में केस को अनदेखा करता है, मैं एक SQL क्वेरी (एमएस एसक्यूएल सर्वर) कैसे बना सकता हूं जहां "कहां" खंड केस असंवेदनशील है?एसक्यूएल सर्वर एक अभिव्यक्ति
SELECT * FROM myTable WHERE myField = 'sOmeVal'
मैं परिणाम मामले
SQL सर्वर डेटाबेस की डिफ़ॉल्ट कॉन्फ़िगरेशन में, स्ट्रिंग तुलना केस-असंवेदनशील हैं। यदि आपका डेटाबेस इस सेटिंग को ओवरराइड करता है (वैकल्पिक collation के उपयोग के माध्यम से), तो आपको यह निर्दिष्ट करना होगा कि आपकी क्वेरी में किस प्रकार का संयोजन उपयोग करना है।
SELECT * FROM myTable WHERE myField = 'sOmeVal' COLLATE SQL_Latin1_General_CP1_CI_AS
ध्यान दें कि मैंने प्रदान किया गया संयोजन सिर्फ एक उदाहरण है (हालांकि यह संभवतः आपके लिए ठीक काम से अधिक होगा)। SQL सर्वर collations की एक और पूरी तरह से रूपरेखा here पाया जा सकता है।
क्या डेटाबेस तुम पर कर रहे हैं अनदेखी वापस आने के लिए करना चाहते हैं? एमएस एसक्यूएल सर्वर के साथ, यह डेटाबेस-व्यापी सेटिंग है, या आप COLLATE कीवर्ड के साथ प्रति-क्वेरी को ओवर-राइड कर सकते हैं।
आमतौर पर, स्ट्रिंग तुलना केस-असंवेदनशील होती है।
SELECT balance FROM people WHERE email = '[email protected]'
COLLATE SQL_Latin1_General_CP1_CI_AS
आप केस संवेदी मजबूर कर सकते हैं, इस तरह एक varbinary के लिए कास्टिंग: अपने डेटाबेस संवेदनशील मिलान केस के लिए कॉन्फ़िगर है, तो आप एक केस संवेदी एक का उपयोग करने के लिए मजबूर करने की जरूरत है
SELECT * FROM myTable
WHERE convert(varbinary, myField) = convert(varbinary, 'sOmeVal')
हालांकि यह कार्यात्मक है, यह एक सलाहकार दृष्टिकोण नहीं है। सॉर्टिंग और स्ट्रिंग तुलना प्रबंधन के लिए कॉलेशन हैं। –
@AdamRobinson हालांकि "स्ट्रिंग तुलना" के बारे में नहीं है? – Fandango68
मैं कहीं और समाधान मिला; यानी
upper(@yourString)
लेकिन यहां हर कोई यह कह रहा है कि, SQL सर्वर में, इससे कोई फर्क नहीं पड़ता क्योंकि यह किसी भी तरह से अनदेखा कर रहा है? मुझे यकीन है कि हमारा डेटाबेस केस-संवेदी है।
आप सही हैं कि डेटाबेस को केस संवेदनशील बनाया जा सकता है, लेकिन यह बहुत अक्षम है, भले ही इसकी आवश्यकता हो। COLLATE उपयोग करने के लिए कीवर्ड है। – mjaggard
इसे लाने के लिए धन्यवाद, @ mjaggard। मैं आशा करता हूं कि, या कोई भी जो मेरे उत्तर को कम करने लगता है, मेरे जैसे किसी के भी अच्छे के लिए विस्तृत है जो मेरे जैसे उत्तरों की खोज करता है और पाता है। – Danny
इसे ऊपर उठाया क्योंकि यह एक पूरी तरह से तर्कसंगत स्पष्टीकरण है। बहुत अधिक ओवरहेड के टुकड़े टुकड़े करें और क्या होगा यदि आपकी स्ट्रिंग में वर्ण हैं कि collation समझ में नहीं आता है? लैटिन 1 एक लुसी एन्कोडिंग योजना है।शुभकामनाएं अर्थपूर्ण परिणाम प्राप्त कर रही हैं यदि आपकी स्ट्रिंग में एक एस्ट्रोफ़े है (जैसे: ओ'ब्रायन)। – eggmatters
नहीं, केवल LIKE
का उपयोग नहीं करेगा। LIKE
आपके दिए गए पैटर्न से मेल खाने वाले मूल्यों की खोज करता है। इस मामले में LIKE
केवल टेक्स्ट 'ओमेवल' और 'कुछवल' नहीं मिलेगा।
एक प्राप्य समाधान LCASE()
फ़ंक्शन का उपयोग कर रहा है। LCASE('sOmeVal')
आपके टेक्स्ट की लोअरकेस स्ट्रिंग प्राप्त करता है: 'कुछवल'। आप अपनी तुलना के दोनों पक्षों के लिए इस सुविधा का उपयोग करते हैं, यह काम करता है:
SELECT * FROM myTable WHERE LCASE(myField) LIKE LCASE('sOmeVal')
बयान दो लोअरकेस तार तुलना, ताकि आपके 'sOmeVal' 'someval' (जैसे 'Someval के हर अंकन से मेल खाएगी ',' सोमेवल 'इत्यादि)।
SQL सर्वर इंस्टॉलेशन के 99.9% में जो _CI को संकलित किया गया है, जैसे केस असंवेदनशील है। – RichardTheKiwi
ऐसा लगता है कि कोई मेरे से तेज़ है :-) –
+1 मुझे आपका संक्षिप्त (और स्क्रॉलबार-कम) उत्तर पसंद आया। –