PostgreSQL CASE语句

时间:2016-04-17 00:26:59

标签: sql postgresql case plpgsql

这来自官方文档(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。

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

1 个答案:

答案 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坚持标准。