在Case陈述式中进行类型转换

时间:2018-08-25 02:42:14

标签: sql postgresql

Segment

   1
   2
   3
   4 
  NUll
   5

如果细分值为空,我想归因于“其他”

预期产量

  Segment

   1
   2
   3
   4 
  Other
   5

我尝试过

 select 
 case when segment is null then 'Other' else segment end as segment 
 from table;

说“数字”类型的输入语法无效:其他

2 个答案:

答案 0 :(得分:2)

case表达式返回单个类型。问题是segment是数字,而'Other'是字符串。表达式必须做出选择,并且它选择数字类型(遵循标准SQL规则)。

这很容易解决。只需投射segment

select (case when segment is null then 'Other' else segment::text end) as segment 
from table;

使用coalesce()编写此查询会更自然:

select coalesce(segment::text, 'Other') as segment
from table;

答案 1 :(得分:0)

select 
 case when CAST(segment AS CHAR) IS NULL then 'Other' else CAST(segment AS CHAR)  end as segment 
 from table