这来自官方文档(http://www.postgresql.org/docs/9.4/static/plpgsql-control-structures.html)
和两种形式的CASE:
CASE ... WHEN ... THEN ... ELSE ... END CASE
CASE WHEN ... THEN ... ELSE ... END CASE
这不起作用:
select case when 1 < 2 then 'a' else 'b' end case from pg_database limit 1;
它适用于end
而不是end case
,但是:
select case when 1 < 2 then 'a' else 'b' end from pg_database limit 1;
这是PostgreSQL 9.4.6。
为什么官方文档中的语法与服务器显然需要的语法相匹配?
答案 0 :(得分:3)
您将PL/pgSQL的文档与SQL的文档混淆。您可以链接到PL / pgSQL的手册,但您的代码会显示一个SQL表达式。
两者都使用关键词CASE
,但这不是一回事。 PL / pgSQL中的CASE
是过程语言的控制结构,而SQL中的CASE
是条件表达式。
你不是第一个感到困惑的人。语法中还有其他细微差别。例如,PL / pgSQL允许"simple CASE
" variant的值的列表,这在SQL中是不可能的:
... WHEN expression [, expression [ ... ]] THEN
在SQL中也很高兴,但标准不允许它和Postgres坚持标准。