在案例函数中使用位置函数 - PostgreSQL

时间:2016-02-29 03:04:35

标签: postgresql

我是 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";

感谢您的帮助!!

1 个答案:

答案 0 :(得分:1)

错误是由于一个简单的拼写错误 - postion而不是position

在这种情况下,你通常会得到一个更容易理解的错误信息(例如“函数postion(text,text)不存在”)。但是,使用特定于函数的关键字作为参数分隔符(由SQL标准强制要求)使得解析器处理这个案例变得更加困难。

修好后,你会遇到另一个错误。请注意,多分支CASE表达式的一般形式为:

CASE
  WHEN <condition1> THEN <value1>
  WHEN <condition2> THEN <value2>
  ...
END