如何在 CASE 语句中使用 ANY?

How do you use ANY within a CASE statement?

我有一个正在处理的 Postgres 查询,它通过 API 调用将参数传递给查询。我已经在 SQL Developer.

本地将其修改为 运行
WHERE (string_to_array( name ,',')) =
CASE
    WHEN 0=1 THEN (string_to_array( name ,','))
    ELSE 
    ANY(string_to_array( 'John Smith,Steve Adam' ,','))
END

AND (string_to_array( role ,',')) =

CASE
    WHEN 0 = 1 THEN (string_to_array( Role ,','))
    ELSE 
    ANY(string_to_array( 'Manager,Analyst' ,','))
END;

当运行时,我得到以下错误:

ERROR: syntax error at or near "ANY"

有人知道为什么会这样吗? Postgres 不喜欢我在 CASE 语句中使用 ANY 吗? (抱歉,如果我的格式不好)

ANY() 必须在 = 运算符旁边。

请试试这个:

WHERE (string_to_array( name ,',')) = ANY(
  CASE
    WHEN 0=1 THEN (string_to_array( name ,','))
    ELSE string_to_array( 'John Smith,Steve Adam' ,',')
  END
)

AND (string_to_array( role ,',')) = ANY(
  CASE
    WHEN 0 = 1 THEN (string_to_array( Role ,','))
    ELSE string_to_array( 'Manager,Analyst' ,',')
  END
);

扩展我上面的评论。这似乎更具可读性:

WHERE (0 = 1 OR (string_to_array( name ,',')) = ANY(string_to_array( 'John Smith,Steve Adam' ,',')))
  AND (0 = 1 OR (string_to_array( role ,',')) = ANY(string_to_array( 'Manager,Analyst'       ,',')))