如何在case语句中使用任何语句?

7vhp5slm  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(402)

我正在处理一个postgres查询,它通过api调用向查询传递一个参数。我修改了它,使其在sqldeveloper中本地运行。

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;

运行时,出现以下错误:
错误:“any”处或附近的语法错误
有人知道为什么会这样吗?postgres不喜欢我在case语句中使用any吗(抱歉,如果我的格式不好)

f4t66c6m

f4t66c6m1#

这个 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
);
deikduxw

deikduxw2#

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

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'       ,',')))

相关问题