2012-03-14 57 views
4

CASE WHEN table1.text IS NULL THEN table2.numbers ELSE table1.text END AS newcolumn我的CASE有什麼問題?

運行此代碼,我不斷收到此錯誤: 錯誤:CASE類型的字符改變和整數無法匹配

你可能會想,既然我創建一個新的專欄,也不會引起問題在我的查詢內。我還想指出,如果有幫助,我使用的是舊版本的PostgreSQL。

+3

「你會認爲這不會導致問題,因爲我在我的查詢中創建一個新的列」Err ...你爲什麼會認爲這不會導致問題?你認爲該列有什麼類型? – 2012-03-14 18:26:24

+0

我猜想它會變成varchar,我沒有創建表,它只是一個查詢來提取信息。 – user519753 2012-03-14 18:28:34

+0

你需要一個'CAST'作爲已經發布的答案,但是你也可以縮短使用'COALESCE'。 – 2012-03-14 18:30:07

回答

4
CASE WHEN table1.text IS NULL THEN table2.numbers::text ELSE table1.text END AS newcolumn 
+0

感謝這個人得到了簡單的代碼。 – user519753 2012-03-14 18:41:01

0

嘗試ISNULL

CASE WHEN ISNULL(table1.text) = 1 THEN table2.numbers ELSE table1.text END AS newcolumn 
5

問題是你嘗試添加table1.text和table2.numbers成一列。這兩列是兩個差異數據類型。嘗試以下

CASE WHEN table1.text IS NULL THEN CAST(table2.numbers AS VARCHAR(50)) ELSE table1.text END AS newcolumn 
0

通過table2.numberstable1.text表示的數據類型必須是相同的,所以它看起來像在這種情況下,你需要CASTtable2.numbers

0

的價值我認爲錯誤是相當清除 - CASE語句可能使用的兩列的類型不兼容。

你爲什麼會認爲試圖使用來自兩列不同類型的值不會導致問題?您可能正在結果集中創建一個新列,但它仍然必須有一個類型,並且必須匹配所有潛在值。

在很多情況下,它可能會推斷出類型,但這有風險,可能不一定是您希望它做出的選擇,所以最好是強制您做出決定。您需要修改CASE語句中的一個或其他列的類型。