2016-02-29 57 views
1

我是新人來的SQLPostgres,所以希望這不是很難找出你們所有人。在個案功能中使用職位功能 - PostgreSQL

我想一個CASE語句中使用定位功能,但我不斷收到錯誤 "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

的錯誤是由於一個簡單的錯字 - postion,而不是position

你一般會得到這樣的情況下(例如「功能postion(text,text)不存在」)一個更易於理解的錯誤消息。然而,使用特定於函數的關鍵字作爲參數分隔符(按照SQL標準的規定),這使得解析器難以應付這種情況。

固定在此之後,你會碰到另一個錯誤。請注意,多支CASE表達式的一般形式是:

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

啊,我明白了。猜猜我到這個時候太晚了:)。 – christopheralan88

+0

我在原始問題中添加了新語句。但是,沒有行被返回,我得到兩列,Project和Case。相反,我想一個列中返回名爲Project Number,表示返回的項目列一個子如果項目字段包含「(」,否則,我希望它只是返回的項目現場。你知道如何做到這一點? – christopheralan88

+1

這是返回第二列是因爲你在查詢的第一行列出了「Project」,你可以在'CASE'語句末尾加上'AS「項目號」'來命名另一列。零行,那是因爲你的' 「2015Budget」'表是空的。 –