2007.03.05

SQLServerの『照合順序』

今更だけれども、SQLServerの『照合順序』というやつでハマったのでメモ。

普通に使っていると、

 SELECT 'Hit!' WHERE 'アイウエオ' Like '%イ%'
 SELECT 'Hit!' WHERE 'アイウエオ' Like '%い%'
 SELECT 'Hit!' WHERE 'アイウエオ' Like '%イ%'
 SELECT 'Hit!' WHERE 'あいうえお' Like '%イ%'
 SELECT 'Hit!' WHERE 'あいうえお' Like '%い%'
 SELECT 'Hit!' WHERE 'あいうえお' Like '%イ%'
 SELECT 'Hit!' WHERE 'アイウエオ' Like '%イ%'
 SELECT 'Hit!' WHERE 'アイウエオ' Like '%い%'
 SELECT 'Hit!' WHERE 'アイウエオ' Like '%イ%'

上記は全て“Hit!”する
(カナだけでなく、アルファベットの全角半角大文字小文字についてもあてはまる)

これは通常データベースの『照合順序』というやつが Japanese_CI_AS なんかでできているかららしい。
(テーブル中のフィールド毎にも設定が変えられる)


この検索を厳密にしたければ、以下のようにする

 SELECT 'Hit!' WHERE 'あいうえお' Like '%イ%' COLLATE Japanese_BIN
 SELECT 'Hit!' WHERE 'あいうえお' Like '%い%' COLLATE Japanese_BIN /* ←これだけが Hit! */
 SELECT 'Hit!' WHERE 'あいうえお' Like '%イ%' COLLATE Japanese_BIN


自分の場合は、patindexの動作で気がついた。
この場合は以下のようにして使う。

 SELECT PatIndex('%イ%', 'あいうえお' COLLATE Japanese_BIN)
 SELECT PatIndex('%い%', 'あいうえお' COLLATE Japanese_BIN) /* ←これだけが 2 */
 SELECT PatIndex('%イ%', 'あいうえお' COLLATE Japanese_BIN)

時に忘れがち。

コメントを投稿

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

photo
ichikawa