You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Decode语句转Redshift遇numeric类型语法错误求助

问题解决:Oracle转Redshift代码的numeric类型报错

错误根源

你遇到的ERROR: invalid input syntax for type numeric错误,本质是numeric类型与字符串的不兼容操作,具体有两个核心原因:

  1. Redshift的numeric类型列不存在空字符串(''),空值统一用null表示。你写的acc_number = ''会触发Redshift尝试把空字符串转成numeric,直接触发语法错误。
  2. 拼接操作'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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:40:58