2007.01.12

T-SQL:Replace関数で大文字小文字を区別(COLLATE句の指定方法)

SQL-Server2000をデフォルトの照合順序でインストールすると
Japanese_CI_AS つまり大文字小文字区別なしアクセント区別ありと
なっていることと思います。
※Windows照合順序に左右されるのかな?
今回私が試している環境は上記の状態です。

この状態でReplace関数を使用すると、次のような結果になります。

Select Replace('DbCd','D', 'a')
 ↓
'abCa'
大文字小文字の区別なしに'D'と'd'が'a'に変換される


この関数上でのみ大文字小文字を区別させるには、使用する文字列自体に照合順序を指定します。

Select Replace('DbCd' collate Japanese_CS_AS,'D', 'a')
 ↓
'abCd'
大文字小文字を区別して'D'のみが'a'に変換される


ちなみに上記指定では変換元の文字列に対して指定していますが
検索文字、置換文字のいずれに指定しても同様の結果が得られるようです。

Select Replace('DbCd','D', 'a' collate Japanese_CS_AS)
 ↓
'abCd'

Select Replace('DbCd','D' collate Japanese_CS_AS, 'a')
 ↓
'abCd'


最初、ヘルプを読んだ際に指定方法がわからず、下記の指定をしてしまっていたのですが、これでは変換後の文字に対して指定しているのでまったく意味を為していなかったんですね。

Select Replace('DbCd','D', 'a') collate Japanese_CS_AS
 ↓
'abCa'


ということで、照合順序の指定方法、COLLATE句がどこにかかるのかを間違えないようにしましょう。

トラックバック

この一覧は、次のエントリーを参照しています: T-SQL:Replace関数で大文字小文字を区別(COLLATE句の指定方法):

» [Tips][SQL]Replace関数の注意事項 送信元 おぎわら@.NET道場 Blog(わんくま編)
[Tips][SQL]Replace関数の注意事項 [詳しくはこちら]

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
nakamura