2011-11-17 11 views
18

मैं सभी कैप्स में कॉलम मान कैसे प्राप्त कर सकता हूं? जैसा LastName = 'SMITH' बजाय 'Smith'SQL सर्वर में सभी कैप्स में मान कैसे खोजें?

यहाँ मैं क्या कोशिश कर रहा था है ...

SELECT * 
    FROM MyTable 
WHERE FirstName = UPPER(FirstName) 
+1

यही काम करना चाहिए:

ओपी उदाहरण का उपयोग करें। आपको क्या परिणाम मिला? – Polynomial

+0

@ पॉलिनोमियल, मुझे बस वही परिणाम मिल रहे हैं जैसे कि मैं "WHERE FirstName = FirstName" चलाता हूं ... शायद एन्कोडिंग अलग होने की आवश्यकता है (अगर यह समझ में आता है .. idk मैं वास्तव में किस बारे में बात कर रहा हूं) – daveomcd

उत्तर

38

आप केस संवेदनशील संयोजन को मजबूर कर सकते हैं;

select * from T 
    where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS 
1

डिफ़ॉल्ट रूप से, एसक्यूएल तुलना केस-संवेदी है।

0

क्या आप इसे अपने कहां के रूप में उपयोग करने का प्रयास कर सकते हैं?

WHERE PATINDEX(FirstName + '%',UPPER(FirstName)) = 1 
0

एक नज़र here

लगता है आप एक केस-संवेदी मिलान निर्दिष्ट करने के लिए कुछ ही विकल्प

  • VARBINARY (लम्बाई)

  • उपयोग मुक़ाबला करने के लिए स्ट्रिंग डाली है है

  • वें गणना तार के ई BINARY_CHECKSUM() की तुलना करने के

  • परिवर्तन तालिका स्तंभ के COLLATION संपत्ति

  • उपयोग अभिकलन कॉलम (VARBINARY की अंतर्निहित गणना)

1

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

SELECT * 
FROM MyTable 
WHERE FirstName = UPPER(FirstName) Collate SQL_Latin1_General_CP1_CS_AS 
5

प्रयास करें

+०१२३५१६४१०६१
SELECT * 
    FROM MyTable 
WHERE FirstName = UPPER(FirstName) COLLATE SQL_Latin1_General_CP1_CS_AS 

यह संयोजन केस संवेदनशील तुलना की अनुमति देता है।

आप निम्नलिखित (from MSDN) क्या करने की जरूरत है कि आप अपने डेटाबेस का मिलान को बदलने के लिए, ताकि आप अपने प्रश्नों में एक केस-संवेदी मिलान specifiy की जरूरत नहीं करना चाहते हैं:

1) सुनिश्चित करें कि आपने आपके उपयोगकर्ता डेटाबेस और उन सभी वस्तुओं को फिर से बनाने के लिए आवश्यक सभी जानकारी या स्क्रिप्ट्स।

2) बीसीपी उपयोगिता जैसे टूल का उपयोग करके अपने सभी डेटा निर्यात करें।

3) सभी उपयोगकर्ता डेटाबेस ड्रॉप करें।

4) सेटअप कमांड की SQLCOLLATION प्रॉपर्टी में नए संयोजन को निर्दिष्ट करने वाले मास्टर डेटाबेस को पुनर्स्थापित करें। उदाहरण के लिए:

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName 
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ] 
/SQLCOLLATION=CollationName 

5) सभी डेटाबेस और उन्हें में सभी वस्तुओं को बनाने के लिए।

6) अपने सभी डेटा आयात करें।

0

प्रयास करें मैं उस के लिए एक सरल UDF बनाई गई इस

SELECT * 
FROM MyTable 
WHERE UPPER(FirstName) COLLATE Latin1_General_CS_AS = FirstName COLLATE Latin1_General_CS_AS 
0

में अच्छा उदाहरण मिल सकते हैं:

create function dbo.fnIsStringAllUppercase(@input nvarchar(max)) returns bit 

    as 

begin 

    if (ISNUMERIC(@input) = 0 AND RTRIM(LTRIM(@input)) > '' AND @input = UPPER(@input COLLATE Latin1_General_CS_AS)) 
     return 1; 

    return 0; 
end 

तो आप आसानी से इसे में किसी भी स्तंभ पर उपयोग कर सकते हैं WHERE खंड।

SELECT * 
FROM MyTable 
WHERE dbo.fnIsStringAllUppercase(FirstName) = 1 
संबंधित मुद्दे