2016-08-18 SQLITE3で複数列の文字列を検索する
検索したい文字列が,ひとつの列ではなく複数の列に存在するとき,ひとつひとつの列を検索しようとすると,条件式とOR条件だらけになってしまいます。
列を結合してから検索すれば,条件式をひとつにできます。
コード例
SELECT * FROM table WHERE COALESCE(column1,'') ||':'||COALESCE(column2,'') ||':'||COALESCE(column3,'') LIKE '%ぐりとぐら%'
要点
- ひとつひとつの列を||で結合する。SQLITE3には,CONCAT関数が存在しないので,文字列の結合には,||演算子を使う
- 列を結合する際は,区切り子(","や":"など)を挟む
- COALESCE関数で,NULL値を空文字列(長さ0の文字列)に変換する。NULL値を含んだまま結合してしまうと,日本語の特定の文字を検索したときに検索漏れが発生する。(ASCII文字に限定すると,NULLを含む列を結合しても,検索漏れは発生しないようです)
問題点
- 常に全走査になる。インデックスが効かない