IN 句を使用して、その中のオプションが LIKE 句であるクエリを実行できるかどうか疑問に思っていました。たとえば、意図したとおりの結果を返す既存の SQL がありますが、これは回りくどい方法のように思えます。
SELECT *
FROM pg_stat_activity
WHERE application_name NOT LIKE '%psql%'
AND (current_timestamp - state_change) > INTERVAL '30 minutes'
AND state IN (
SELECT state
FROM pg_stat_activity
WHERE state LIKE '%idle%'
OR state LIKE '%disabled%'
)
次のようなものに置き換える方法はありますか?
SELECT *
FROM pg_stat_activity
WHERE application_name NOT LIKE '%psql%'
AND (current_timestamp - state_change) > INTERVAL '30 minutes'
AND state IN ('%idle%', '%disabled%')
ベストアンサー1
使用に似ているの代わりにのように
AND state SIMILAR TO '%(idle|disabled)%'
https://www.postgresql.org/docs/9.0/static/functions-matching.html