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 坚持标准。
本文来自官方文档(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 坚持标准。