如何在 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' ,',')))
我有一个正在处理的 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' ,',')))