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';
我正在学习 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';