2010-08-02 10 views
19

प्रश्नों मैं इस डेटाबेस है:एसक्यूएल सर्वर केस संवेदनशीलता

abcDEF 

ABCdef 

abcdef 

अगर मैं लिखना: select * from MyTbl where A='ABCdef'

पाने के लिए: ABCdef

और पाने के लिए:

abcDEF 

    ABCdef 

    abcdef 

अग्रिम धन्यवाद

लिखने के लिए भूल गए - sqlCE

+3

अपरकेस/Lowecase, बड़ा नहीं/छोटे। – Oded

उत्तर

32

आप COLLATE कीवर्ड का उपयोग कर अपने प्रश्न केस को संवेदनशील बना सकते हैं।

SELECT A 
FROM MyTbl 
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef' 
+0

सहायता के लिए धन्यवाद, एसक्यूएलसीई पर इसे कैसे करें? – Gold

1

एसक्यूएल, गैर केस-संवेदी डिफ़ॉल्ट रूप से है ताकि आप सभी तीन आइटम अगर एक साधारण स्ट्रिंग तुलना कर मिल जाएगा। यह केस-संवेदी बनाने के लिए, आप के रूप में varbinary फ़ील्ड का मान और अपनी खोज को मूल्य डाली कर सकते हैं:

SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20)) 

ऊपर मानती है कि आपके varchar क्षेत्र 20. पर आकार है nvarchar के लिए यह (धन्यवाद @ ps2goat) दोगुना।

+2

-1 वाह। यह सबसे बुरा जवाब संभव है - सभी सूचकांक निकालें, एक टेबल स्कैन को मजबूर करें और पूरी तरह से कोलेक्शन बदलने में सक्षम होने की वास्तविकता को अनदेखा करें;) – TomTom

+3

@ टॉमटॉम - 'COLLATE' का उपयोग करना मतलब है कि सूचकांक का उपयोग नहीं किया जाएगा। –

+2

मुझे यकीन है कि बदतर उत्तर हैं - कम से कम कार्य पूछताछ। मेरी समझ से इंडेक्स का उपयोग करके केस असंवेदनशीलता निर्दिष्ट करने का कोई तरीका नहीं है जब तक कि आप बाइनरी तुलना नहीं कर रहे हों। मैंने कभी कोशिश नहीं की है, लेकिन यदि आपकी तालिका कॉलम को एक शब्दावली के रूप में परिभाषित किया गया था, तो आप उस पर एक अनुक्रमणिका कर सकते हैं और केवल अपनी खोज स्ट्रिंग डालना होगा। –

6

यदि आपके पास पहले से डेटाबेस में abcDEF, एबीसीडीएफ, abcdef है तो यह पहले से ही केस संवेदनशील है या आपके पास कोई बाधा नहीं है।

आप यकीन है कि यह वास्तव में संवेदनशील मामला है जो सूचकांक उपयोग को अमान्य कर देंगे

SELECT TheColumn 
FROM MyTable 
WHERE TheColumn COLLATE Latin1_General_CS_AS = 'ABCdef' COLLATE Latin1_General_CS_AS 

क्या लहजे भी के बारे में (एक गैर केस संवेदी डेटाबेस के लिए) बनाने के लिए दोनों पक्षों पर एक COLLATE जोड़ने के लिए होगा? Latin1_General_CS_AI, Latin1_General_Bin?

1

यह सिर्फ where के बाद द्विआधारी कीवर्ड जोड़ने का प्रयास करें:

select * from MyTbl where binary A = 'ABCdef'; 
संबंधित मुद्दे