14

SQL Server 2000/2005 データベースのテーブルで大文字と小文字を区別する検索/置換を実行するには、正しい照合順序を使用する必要があります。

データベースの既定の照合順序で大文字と小文字が区別されるかどうかを判断するにはどうすればよいですか? そうでない場合は、大文字と小文字を区別する検索/置換を実行する方法は?

4

7 に答える 7

19
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' 

デフォルトの照合で大文字と小文字が区別されると想定しないでください。大文字と小文字を区別するものを毎回指定するだけです (もちろん、言語に適したものを使用してください)。

于 2008-09-22T09:05:04.253 に答える
9

次のように、デフォルトの照合で大文字と小文字が区別されるかどうかを判断します。

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

0 の結果は大文字と小文字を区別する照合モードであることを示し、8 は大文字と小文字を区別しないことを示します。

照合で大文字と小文字が区別されない場合は、検索/置換を実行するときに使用する照合モードを明示的に宣言する必要があります。

使用する照合モードを指定して、大文字と小文字を区別する検索/置換を実行する UPDATE ステートメントを作成する方法を次に示します。

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

これは と一致して置換しますが、 orは置換'THECONTENT'しません。'TheContent''thecontent'

于 2008-09-22T09:05:29.683 に答える
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]
于 2013-09-11T14:26:07.947 に答える
0

テーブルをクエリするたびに照合を指定するか、テーブルを変更して照合を列に永続的に適用することができます。

クエリ メソッドを実行することを選択した場合は、大文字と小文字を区別しない検索引数も含めると効果的です。それらを含めると、SQL がより効率的な exec プランを選択することがわかります。例えば:

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe' 
    and testColumn = 'eXaMpLe'
于 2008-10-24T01:29:28.513 に答える
0

まず、これを確認してください: http://technet.microsoft.com/en-us/library/ms180175(SQL.90).aspx

CI では大文字と小文字が区別されず、CS では大文字と小文字が区別されます。

于 2008-09-22T09:30:22.087 に答える
0

また、これは便利かもしれません。select * from fn_helpcollat​​ions() - サーバーがサポートするすべての照合を取得します。select * from sys.databases - ここには、サーバー上のすべてのデータベースの照合順序を指定する列があります。

于 2008-09-22T09:53:33.653 に答える