PostgreSQL WHERE IN LIKEクエリ 質問する

PostgreSQL WHERE IN LIKEクエリ 質問する

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

おすすめ記事