皆さん、こんにちは。 SQL Server/Microsoft Azure SQL Database サポートチーム です。
今回は、日本語照合順序 (Japanese、Japanese_90、Japanese_XJIS_100、Japanese_Unicode) での、長音、繰り返し符号の特殊な取り扱いについて紹介します。
[長音、繰り返し符号の特殊な取り扱い]
長音、繰り返し符号には、以下のものが存在します。
長音符号 | SJIS | UTF-16 |
ー | 0x815B | 0x30FC |
― | 0x815C | 0x2015 |
ー | 0xB0 | 0xFF70 |
繰り返し符号 | SJIS | UTF-16 |
ヽ | 0x8152 | 0x30FD |
ヾ | 0x8153 | 0x30FE |
ゝ | 0x8154 | 0x309D |
ゞ | 0x8155 | 0x309E |
々 | 0x8158 | 0x3005 |
SQL Server で 日本語照合順序を使用している場合、長音、繰り返し符号は、特殊な文字として、全て等価の符号として取り扱われます。そのため、長音、繰り返し符号で検索を実施した場合には、全ての 長音、繰り返し符号が同じ符合(文字)として認識されるようになります。
具体的に REPLACE 関数を実行し、動作を見てみましょう。
SELECT REPLACE('長音符号 ー繰り返し符号 ヽ ','々','☆') as REPLACE;
REPLACE |
上記のクエリでは、文字列 “長音符号 ー 繰り返し符号 ヽ”の中に、”々”が含まれている場合、”☆”に変換するというクエリになります。
クエリの結果を見ると、長音、繰り返し符号が、”☆”に変換されていることがわかると思います。 これは、長音符号 “ー”、繰り返し符号 ”ヽ”、繰り返し符号 ”々” がすべて同じ符号(文字) として扱われるためとなります。
しかしながら、特定の長音、繰り返し記号のみを REPLACE 関数などで変換する必要がある状況もあると思います。 この場合、明示的に バイナリの照合順序 (Japanese_BIN など)を COLLATE 句で指定することにより、実現することが可能です。
SELECT REPLACE('長音符号 ー繰り返し符号 ヽ ','々' COLLATE Japanese_BIN,'☆') as REPLACE;
// クエリ結果 // REPLACE |
バイナリの照合順序の場合は、文字の比較の際に、文字コードで比較が行われ、長音、繰り返し符号でも特殊な取り扱いはされません。そのため、明示的に バイナリの照合順序を COLLATE 句 で指定することにより、各長音、繰り返し符号が別の符号(文字) として認識させることが可能になります。
[関連情報]
日本語照合順序での漢数字 〇 (0x815A) の取り扱いについて
※ 本Blogの内容は、2014年12月 現在の内容となっております