2017-06-01 1104 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

相关问题