2017-06-01 36 views
2

我寫在Postgres的select語句包含的case語句如下:錯誤:CASE類型的字符改變和數字不能匹配

,(case when all_loc.country = 'DE' then msc_si.buyer_id else msc_si.buyer_name end) as "purchasing_group_name_buyer_name" --story 
,(case when all_loc.country = 'DE' then msc_si.planner_code else mscp.description end) as "mrp_controller_name"    --story 

我收到以下錯誤。我試過用IS而不是=,沒有工作。沒有這兩個case語句,查詢運行完美。

ERROR: CASE types character varying and numeric cannot be matched SQL state: 42804

+1

@a_horse_with_no_name,我不認爲這是一個比較問題,我認爲這是一個類型輸出問題。也就是說,我假設'msc_si.buyer_name'是一個字符串,'msc_si.buyer_id'是一個數字。 – jmelesky

回答

3

case表達式的所有分支應返回相同的數據類型。實現這一點的一種方法是在需要時明確施放:

,(case when all_loc.country = 'DE' then msc_si.buyer_id::varchar else msc_si.buyer_name end) as "purchasing_group_name_buyer_name" 
-- Here -----------------------------------------------^ 
,(case when all_loc.country = 'DE' then msc_si.planner_code::varchar else mscp.description end) as "mrp_controller_name" 
-- And gere -----------------------------------------------^ 
+0

謝謝。有效! :-) – Abhijit

+0

'char'實際上是'char(1)',它會截斷大部分數字ID,就像'1234 :: char'是''1''。 OP應該使用':: text'或'varchar'強制轉換。 – pozs

+0

@pozs很好的接收,謝謝!我相應地編輯了我的答案。 – Mureinik

相關問題