Oracle Decode语句转Redshift遇numeric类型语法错误求助
问题解决:Oracle转Redshift代码的numeric类型报错
错误根源
你遇到的ERROR: invalid input syntax for type numeric错误,本质是numeric类型与字符串的不兼容操作,具体有两个核心原因:
- Redshift的numeric类型列不存在空字符串(
''),空值统一用null表示。你写的acc_number = ''会触发Redshift尝试把空字符串转成numeric,直接触发语法错误。 - 拼接操作
'123'||acc_number中,acc_number是numeric类型,Redshift会默认尝试将字符串转为numeric做数值运算,而非你期望的字符串拼接,类型不匹配导致报错。
修正后的代码
select case when acc_number is null then acc_number else ('123' || acc_number::varchar)::numeric end as acc_number from table1
关键修正点
- 替换空值判断逻辑:把
acc_number = ''改为acc_number is null,适配Redshift numeric列的空值规则。 - 类型转换实现正确拼接:先将numeric类型的
acc_number转为varchar(acc_number::varchar),再和'123'做字符串拼接;如果需要保持结果为numeric类型,最后再将拼接后的字符串转回numeric(外层的::numeric)。
如果业务场景允许结果为varchar类型,也可以简化为:
select case when acc_number is null then '' else '123' || acc_number::varchar end as acc_number from table1
内容的提问来源于stack exchange,提问作者Day Lee
相关产品推荐
相关产品推荐

