You need to enable JavaScript to run this app. 如何提取@等特定特殊字符后的内容,无该字符时正确返回原字符串
优惠活动
大模型
产品
解决方案
定价
更多

如何提取@等特定特殊字符后的内容,无该字符时正确返回原字符串

问题根因

你现有代码运行异常的核心原因是:charindex 函数在字符串中未匹配到 @ 时会返回 0,直接将 0 作为 substr 的起始位置会触发数据库字符串截取函数的异常计算逻辑,最终返回重复的原字符串。
另外需要注意你代码中的 charindex 参数顺序存在书写错误,标准SQL中该函数的语法为 charindex(要查找的子串, 目标字符串, 起始查找位置),参数顺序颠倒也可能导致匹配结果不符合预期。

修复方案

写法1:通用条件判断(适配所有SQL方言,可读性高)

通过 CASE 语句先判断是否存在 @,再决定截取逻辑,同时调整截取起始位 +1 跳过 @ 符号本身:

res := CASE
    WHEN charindex('@', str, 1) > 0 THEN substr(str, charindex('@', str, 1) + 1, length(str))
    ELSE str
END;

写法2:简洁函数式写法(适配支持 coalesce、nullif 的主流数据库)

通过函数组合省略显式的条件判断,代码更精简:

res := coalesce(substr(str, nullif(charindex('@', str, 1), 0) + 1), str);

逻辑说明:nullif 会把未匹配到 @ 时返回的 0 转为 null,substr 接收 null 作为起始位时会返回 null,最后用 coalesce 将 null 值替换为原字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:54:05