我是 SQL 和 Postgres 的新手,所以希望这对你们所有人来说都不是太难理解。
我正在尝试在CASE语句中使用Position函数,但我不断收到错误
"ERROR: Syntax error at or near ""Project"". LINE 2: CASE WHEN position('(' IN "Project") >0 THEN".
之前我已经使用过这个位置功能而且工作正常,所以我很困惑这里的问题是什么。我还尝试了表名,例如"xyztable.Project"
和"Project"
- 两者都没有引号。
以下是整个声明:
SELECT "Project",
CASE WHEN postion('(' IN "Project") >0 THEN
substring("Project",position('(' IN "Project")+1,position(')' IN "Project")-2)
CASE WHEN postion('('IN "Project") IS NULL THEN
"Project"
END
FROM "2015Budget";
由于我没有超越本声明的第二行,如果有人发现任何会阻止此声明正常运行的内容,请随时指出。
新声明:
SELECT "Project",
CASE
WHEN position('(' IN "Project") >0 THEN
substring("Project",position('(' IN "Project")+1,position(')' IN "Project")-2)
WHEN position('('IN "Project") IS NULL THEN
"Project"
END
FROM "2015Budget";
感谢您的帮助!!
答案 0 :(得分:1)
错误是由于一个简单的拼写错误 - postion
而不是position
。
在这种情况下,你通常会得到一个更容易理解的错误信息(例如“函数postion(text,text)
不存在”)。但是,使用特定于函数的关键字作为参数分隔符(由SQL标准强制要求)使得解析器处理这个案例变得更加困难。
修好后,你会遇到另一个错误。请注意,多分支CASE
表达式的一般形式为:
CASE
WHEN <condition1> THEN <value1>
WHEN <condition2> THEN <value2>
...
END