回答:
SIMILAR TO代替をサポートするPostgresの演算子を使用できます。
select * from table where lower(value) similar to '%(foo|bar|baz)%';
SIMILAR TOと、内部的に正規表現検索に変換されます
lower()最初に各文字列を小文字に変換するため、使用すると効果がないと思います。大文字と小文字を区別しない一致よりもコストが高くなります
PostgreSQLは、完全なPOSIX正規表現もサポートしています。
select * from table where value ~* 'foo|bar|baz';
~*大文字小文字を区別しないマッチングのためで、~大文字と小文字が区別されます。
別のオプションはANYを使用することです:
select * from table where value like any (array['%foo%', '%bar%', '%baz%']);
select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
ブール値を生成する任意の演算子でANYを使用できます。正規表現オプションの方が速いと思いますが、いずれもツールボックスに含めると便利なツールです。
実際、PostgreSQLにはそのための演算子があります。
SELECT *
FROM table
WHERE lower(value) ~~ ANY('{%foo%,%bar%,%baz%}');
~~以下のためのちょうど別の名前があるlike:「演算子は~~に相当しLIKE、かつ~~*相当するILIKE存在でもある。!~~と!~~*表すオペレーターNOT LIKEとNOT ILIKEそれぞれ、これらの演算子のすべては、PostgreSQL固有のものです。」。そして'{%foo%,%bar%,%baz%}'のテキスト形式ですarray['%foo%', '%bar%', '%baz%']。
「エレガントな」ソリューションの1つは、全文検索を使用することです:http : //www.postgresql.org/docs/9.0/interactive/textsearch.html。次に、全文検索クエリを使用します。