Teradata转Hive:替换To_Number函数解决SQL执行报错问题
问题解决方案
修改思路
Hive不支持Teradata的To_Number函数,需用Hive原生类型转换函数替代,同时保证逻辑与原语句一致:
- 用
TRY_CAST替代To_Number:实现字符串到整数的安全转换,转换失败时返回NULL(匹配Teradata中To_Number处理无效数字的行为)。 - 统一
COALESCE参数类型:原语句中To_Number返回数字类型,默认值'00'需改为整数0,避免类型不匹配报错。 - 保留
TRIM逻辑:先去除截取字符串的前后空格再转换,与原逻辑一致。
修改后的SQL语句
CAST(COALESCE(TRY_CAST(TRIM(SUBSTR(JT0004LOANTEXT, 927, 2)) AS INTEGER), 0) AS INTEGER) AS BI_LOAN_CHARACTER_CD
兼容低版本Hive的替代方案
若你的Hive版本低于2.3.0(不支持TRY_CAST),可改用CAST配合正则校验实现,仅适用于确定截取内容为纯数字的场景:
CAST(COALESCE(CASE WHEN REGEXP_LIKE(TRIM(SUBSTR(JT0004LOANTEXT, 927, 2)), '^[0-9]+$') THEN CAST(TRIM(SUBSTR(JT0004LOANTEXT, 927, 2)) AS INTEGER) ELSE NULL END, 0) AS INTEGER) AS BI_LOAN_CHARACTER_CD
内容的提问来源于stack exchange,提问作者ryan
相关产品推荐
相关产品推荐

