PostgreSQL CASE 语句

PostgreSQL CASE statement

本文来自官方文档(http://www.postgresql.org/docs/9.4/static/plpgsql-control-structures.html)

and two forms of 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。

为什么官方文档中的语法与服务器显然需要的语法不匹配?

您混淆了 PL/pgSQL with the one for SQL 的文档。您 link PL/pgSQL 的手册,但您的代码显示 SQL 表达式。

两者都使用关键词CASE,但不是一回事。 PL/pgSQL中的CASE是过程语言的控制结构,而SQL中的CASE是条件表达式.

你不是第一个被弄糊涂的人。语法上还有其他细微差别。例如,PL/pgSQL 允许 list 值用于 "simple CASE" variant,这在 SQL:

中是不可能的
... WHEN expression [, expression [ ... ]] THEN

在 SQL 中也很好,但标准不允许,Postgres 坚持标准。