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

如何在嵌套函数中以@作为子串位置?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, '@'):返回@在邮箱字符串中的位置(数字),如果邮箱不含@则返回0
  • SUBSTR(email, 位置+1):从@的下一位开始截取,拿到完整的域名部分
  • DECODE:根据截取到的域名,匹配对应的公司名称,最后加默认值处理异常场景

内容的提问来源于stack exchange,提问作者Ravene97

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:15:36