2010-10-19 23 views
144

तुलना करें आप तारों की तुलना कैसे करते हैं ताकि तुलना केवल तभी सही हो जब प्रत्येक स्ट्रिंग के मामले बराबर हों। उदाहरण के लिए:एसक्यूएल केस संवेदनशील स्ट्रिंग

Select * from a_table where attribute = 'k' 

... 'के' की विशेषता के साथ एक पंक्ति वापस कर देगा। मुझे यह व्यवहार नहीं चाहिए।

+0

यह आपकी आवश्यकता नहीं हो सकती है लेकिन आप कोलेक्शन बदल सकते हैं या अपनी क्वेरी में एक विशिष्ट कॉलेशन का उपयोग कर सकते हैं। – Kane

+5

कौन सा एसक्यूएल उत्पाद? – onedaywhen

उत्तर

260
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS 

चाल थी।

+1

मैं आमतौर पर लैटिन 1_General_Bin – gbn

+3

का उपयोग करता हूं हां, मानक दृष्टिकोण केस-असंवेदनशील संयोजन का उपयोग करना है, हालांकि कॉलेशन स्वयं विक्रेता-विशिष्ट हैं। क्या आपका एसक्यूएल सर्वर सिंटैक्स है? – onedaywhen

+0

मेरे मामले में, मेरे डीबी में 1 कॉलम है जो केस-संवेदी है। मुझे इसे एक मानक (सीआई) कॉलम से तुलना करने की आवश्यकता थी। मैंने इस में भिन्नता का उपयोग किया जहां Foo.Bar = (Baz.Bar COLLATE लैटिन 1_General_CS_AS) – Hypnovirus

3

आप attribute को BINARY के रूप में परिभाषित कर सकते हैं या अपनी खोज करने के लिए INSTR या STRCMP का उपयोग कर सकते हैं।

29

इस सिंटैक्स का उपयोग केस संवेदी के रूप में उस गुण परिवर्तित कर सकते हैं:

ALTER TABLE Table1 
ALTER COLUMN Column1 VARCHAR(200) 
COLLATE SQL_Latin1_General_CP1_CS_AS 

अब अपनी खोज केस संवेदी हो जाएगा।

आप फिर से उस स्तंभ केस संवेदी बनाना चाहते हैं, तो का उपयोग

ALTER TABLE Table1 
ALTER COLUMN Column1 VARCHAR(200) 
COLLATE SQL_Latin1_General_CP1_CI_AS 
12

आप आसानी से VARBINARY (अधिकतम लंबाई) के लिए कॉलम में कनवर्ट कर सकते हैं, लंबाई अधिकतम होना चाहिए आप दोषपूर्ण से बचने के लिए उम्मीद तुलना, कॉलम की लंबाई के रूप में लंबाई निर्धारित करने के लिए पर्याप्त है। स्तंभ की सहायता से आप अंतरिक्ष को छोड़कर वास्तविक मूल्य की तुलना करने के लिए एक अर्थ है ट्रिम और अपने तालिका स्तंभ में महत्वपूर्ण, यह एक सरल नमूना है और जैसा कि आप देख सकते हैं मैं कॉलम मूल्य ट्रिम और फिर परिवर्तित और तुलना .:

CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2))) 

उममीद है कि इससे मदद मिलेगी।

+2

बिल्कुल वही जो मैं खोज रहा था। ऊपरी-केस वर्ण वाले प्रविष्टियों को ढूंढने के लिए एक बार, केस संवेदनशील तुलना करने का एक आसान तरीका। –

10

बस एक और विकल्प के रूप में आप HASHBYTES, कुछ इस तरह इस्तेमाल कर सकते हैं:

SELECT * 
FROM a_table 
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k') 
-5

यदि आप Oracle SQL नाविक का उपयोग करें, आप उपयोग कर सकते हैं;

Select * from a_table where attribute = UPPER('k') 

यदि आप 'के' और 'के' की विशेषता के साथ एक पंक्ति वापस करना चाहते हैं। आप इसका उपयोग कर सकते हैं;

Select * from a_table where UPPER(attribute) = UPPER('k') 
+1

यह गलत है। यह पंक्तियों को 'के' और 'के' दोनों के साथ वापस कर देगा, जो वास्तव में मूल पोस्टर नहीं चाहता है। –

+0

@RandScullard क्षमा करें, लेकिन यह ओरेकल एसक्यूएल के लिए ऐसा होना चाहिए। मैं ऑरैकल एसक्यूएल नेविगेटर के साथ काम कर रहा हूं – elfekz

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