2008-09-22 16 views
6

SQL सर्वर 2000/2005 डेटाबेस में किसी तालिका पर केस-संवेदी खोज/प्रतिस्थापन करने के लिए, आपको सही संयोजन का उपयोग करना होगा।मैं केस-संवेदनशील खोज कैसे कर सकता हूं और SQL 2000/2005 में प्रतिस्थापित कैसे करूं?

आप कैसे निर्धारित करते हैं कि डेटाबेस के लिए डिफ़ॉल्ट संयोजन केस-संवेदी है, और यदि ऐसा नहीं है, तो केस-संवेदनशील खोज/प्रतिस्थापन कैसे करें?

उत्तर

12
SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'example' 

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'EXAMPLE' 

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe' 

डिफ़ॉल्ट मिलान यह मानकर न चलें केस संवेदी हो जाएगा, सिर्फ एक केस संवेदी एक हर बार (बेशक अपनी भाषा के लिए सही एक का उपयोग कर)

8

निर्धारित डिफ़ॉल्ट मिलान हो यह तय केस इस तरह संवेदनशील:

select charindex('RESULT', 'If the result is 0 you are in a case-sensitive collation mode')

0 का एक परिणाम यह संकेत करता है कि आप एक केस-संवेदी मिलान मोड में हैं, 8 को इंगित करता है यह केस-संवेदी है।

यदि संयोजन केस-असंवेदनशील है, तो आपको खोज/प्रतिस्थापन करते समय उपयोग करने के लिए इच्छित संयोजन मोड को स्पष्ट रूप से घोषित करने की आवश्यकता है।

यहाँ कैसे मिलान मोड निर्दिष्ट करने का उपयोग करने के द्वारा एक केस-संवेदी खोज प्रदर्शन/बदलने के लिए एक अद्यतन बयान के निर्माण के लिए दिया गया है:

update ContentTable 
set ContentValue = replace(ContentValue COLLATE Latin1_General_BIN, 'THECONTENT', 'TheContent') 
from StringResource 
where charindex('THECONTENT', ContentValue COLLATE Latin1_General_BIN) > 0 

इस से मेल खाते हैं और 'THECONTENT' बदल देगा, लेकिन नहीं 'TheContent' या 'thecontent'

+0

यह सही उत्तर है। –

0

इसके अलावा, यह उपयोगी हो सकता है। * fn_helpcollations() से चुनें * यह आपके सर्वर का समर्थन करने वाले सभी कॉलेशन प्राप्त करता है। sys.databases से * चुनें - यहां एक कॉलम है जो निर्दिष्ट करता है कि आपके सर्वर पर प्रत्येक डेटाबेस में क्या संयोजन है।

0

जब भी आप टेबल पर क्वेरी करते हैं तो आप कॉलेशन निर्दिष्ट कर सकते हैं या आप टेबल को बदलकर स्थायी रूप से कॉलम पर कॉलेशन लागू कर सकते हैं।

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

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe' 
    and testColumn = 'eXaMpLe' 
1

एकाधिक कथन में किया जा सकता है। यह काम नहीं करेगा यदि आपके पास लंबे तार हैं जिनमें दोनों को एक लोअरकेस शब्दों को पूंजीकृत किया गया है जिन्हें आप प्रतिस्थापित करना चाहते हैं। आपको अलग-अलग संयोजन का उपयोग करने की आवश्यकता हो सकती है जो यह उच्चारण और केस संवेदनशील है।

UPDATE T SET [String] = ReplacedString 
FROM [dbo].[TranslationText] T, 
    (SELECT [LanguageCode] 
     ,[StringNo] 
     ,REPLACE([String], 'Favourite','Favorite') ReplacedString 
    FROM [dbo].[TranslationText] 
    WHERE 
    [String] COLLATE Latin1_General_CS_AS like '%Favourite%' 
    AND [LanguageCode] = 'en-us') US_STRINGS 
WHERE 
T.[LanguageCode] = US_STRINGS.[LanguageCode] 
AND T.[StringNo] = US_STRINGS.[StringNo] 

UPDATE T SET [String] = ReplacedString 
FROM [dbo].[TranslationText] T, 
    (SELECT [LanguageCode] 
     ,[StringNo] 
     , REPLACE([String], 'favourite','favorite') ReplacedString 
    FROM [dbo].[TranslationText] 
    WHERE 
    [String] COLLATE Latin1_General_CS_AS like '%favourite%' 
    AND [LanguageCode] = 'en-us') US_STRINGS 
WHERE 
T.[LanguageCode] = US_STRINGS.[LanguageCode] 
AND T.[StringNo] = US_STRINGS.[StringNo] 
2

आप अलग मामलों में एक ही क्षेत्र में एक ही शब्द की है, और केवल विशिष्ट मामलों की जगह, तो आप अपने REPLACE समारोह में मिलान का उपयोग कर सकते करना चाहते हैं:

UPDATE tableName 
SET fieldName = 
    REPLACE(
     REPLACE(
      fieldName COLLATE Latin1_General_CS_AS, 
      'camelCase' COLLATE Latin1_General_CS_AS, 
      'changedWord' 
     ), 
     'CamelCase' COLLATE Latin1_General_CS_AS, 
     'ChangedWord' 
    ) 

इसके परिणामस्वरूप:

This is camelCase 1 and this is CamelCase 2 

बनना:

This is changedWord 1 and this is ChangedWord 2 
संबंधित मुद्दे

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