如何在嵌套函数中以@作为子串位置?DECODE结合SUBSTRING报错求助
问题解决:DECODE结合SUBSTR报错"invalid number"
报错原因
你遇到的"invalid number"错误,本质是SUBSTR函数的位置参数传入了非数值类型。Oracle的SUBSTR要求第二个参数(起始位置)必须是数字,如果你直接把@这类字符传进去,Oracle会尝试将其转换为数字,转换失败就触发这个报错。
正确写法
要提取邮箱域名并映射公司名,得先用INSTR函数找到@的数值位置,再传给SUBSTR截取域名,最后用DECODE做映射。示例SQL如下:
SELECT email, DECODE( -- 先找到@的位置,从下一位开始截取域名 SUBSTR(email, INSTR(email, '@') + 1), 'companyA.com', '公司A', 'companyB.com', '公司B', 'companyC.net', '公司C', '未知公司' -- 处理匹配不到的情况 ) AS company_name FROM employees;
关键说明
INSTR(email, '@'):返回@在邮箱字符串中的位置(数字),如果邮箱不含@则返回0SUBSTR(email, 位置+1):从@的下一位开始截取,拿到完整的域名部分DECODE:根据截取到的域名,匹配对应的公司名称,最后加默认值处理异常场景
内容的提问来源于stack exchange,提问作者Ravene97
相关产品推荐
相关产品推荐

