とある1つの文字列型の列に特定の文字列が含まれている行を抽出する場合、以下のSQLで実現できます。
SELECT * FROM <テーブル名> WHERE col1 LIKE "%検索したい文字列%"
それでは、検索対象の列がテーブルの全てになった場合はどうすればよいでしょうか?
愚直に書くならこのようなSQLになりますが、カラムの数が増えるとSQLを書くのが面倒になります。
SELECT * FROM <テーブル名> WHERE col1 LIKE "%検索したい文字列%" OR col2 LIKE "%検索したい文字列%" OR ...
解決策
CONTAINS_SUBSTR
関数を使う。
この関数は通常は以下のように文字列を2つ渡して、第一引数の文字列の中に第二引数の文字列が含まれているかどうかを判断するものです。
SELECT CONTAINS_SUBSTR('hoge fuga piyo', 'fuga') AS result;
# -> TRUE
しかし、この関数の第一引数にはテーブルを渡すこともできます。
その場合はそのテーブルの全ての列に対して検索を行い、どこかしらの列に検索対象の文字列が含まれた場合にTRUEを返します。
そのため、以下のSQLで 「どこかしらの列」に含まれる文字列を見つけることができます。
SELECT * FROM <テーブル名> WHERE CONTAINS_SUBSTR(<テーブル名>, "検索したい文字列")