Nacky - Snowland.net
Nacky(Issei Ishii)がDJ/Composerのようなふりして書き散らすblogサイト
Jump to navigation
2010-05-18
SQLで大文字/小文字/全角/半角/ひらがな/カタカナを検索
文字列一致を見たいのだが,文字列には全角/半角,大文字/小文字,ひらがな/カタカナが含まれている.
これを一括で条件指定したい.
というときの解決法.
(PHP+ PostgreSQL/MySQLを想定)
■1.検索用に別カラムを持っておく
DBにあらかじめ mb_convert_encoding($str,'AcKV') 等で簡易に正規化(?)した文字列を持つためのカラムを作成する.
検索時は変換したカラムに対して指定する.
まぁ,これが楽か.
ただしINSERTもUPDATEも二度手間です.
そういうものだとして実装すれば良いわけですが.
■2.検索時にがんばる
2-1.translateする
translate(upper(str_column),'abc...','abc...') LIKE '%str%'
ただしPostgreSQLにはtranslateがありますがMySQLには無いようです.
アルファベット26文字+ひらがな50音+α…面倒…
2-2.正規表現でがんばる
あらかじめPHPで '(s|S|s|S)(t|T|t|T)(r|R|r|R)' みたいな文字列を作っておいて
str_column ~ '(s|S|s|S)(t|T|t|T)(r|R|r|R)'
とする(MySQLの場合は ~ じゃなくて REGEXP).
いずれにしろコスト高いなー.
■ということで
あらかじめわかっているなら1.のほうが良いですね.
あとはテキスト全文検索で正規化機能を使うとか(というかこれが本命?).ただし標準で入ってないことも多いのでケースバイケース.
Comments
Add Comments