psql:案例用法

psql: CASE usage

我正在学习 psql,对 CASE 关键字很困惑。

说我有一个 table "pets".

    name     | species |       owner        | gender |     color
-------------+---------+--------------------+--------+---------------
 Nagini      | snake   | Lord Voldemort     | female | green
 Hedwig      | owl     | Harry Potter       | female | snow white
 Scabbers    | rat     | Ron Weasley        | male   | unspecified
 Pigwidgeon  | owl     | Ron Weasley        | male   | grey
 Crookshanks | cat     | Herminone Granger  | male   | ginger
 Mrs Norris  | cat     | Argus Filch        | female | dust-coloured
 Trevor      | toad    | Neville Longbottom | male   | brown

我被要求 "Use CASE to show pet names and a column to indicate whether the pet's name is long or short (a long name is strictly more than 6 characters long). Filter to select only female pets."

官方文档只给出了单独使用CASE的例子。当我尝试解决问题时,我尝试了

SELECT * 
CASE 
  WHEN name > 6 THEN
    msg:= 'long'
  ELSE 
    msg:= 'short'
END CASE
FROM pets WHERE gender = 'female';

这给了我一个错误 ERROR: syntax error at or near "CASE"

我可以将 CASE 与 SELECT 语句结合使用吗?如果是如何?如果不是,我该如何解决上述任务?

根据 PostgreSQL 文档 (https://www.postgresql.org/docs/current/static/functions-conditional.html),case 表达式的正确方法是:

CASE WHEN condition THEN result [WHEN ...] [ELSE result] END

根据您发布的代码,您在本应为 END 的情况下以 END CASE 结束表达式。你也忘了在星号后加逗号。我会按以下方式编写您的查询:

SELECT *, CASE WHEN length(name) > 6 THEN 'long' ELSE 'short' END as msg FROM pets WHERE gender = 'female';