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

PATINDEX和SUBSTRING函数未返回正确值的技术问询

解决SQL提取3C开头10位字符串时无匹配留空的问题

我清楚你的困扰——当前查询在Service Item Value列没有匹配到以3C开头的10位字符串时,会错误截取前10个字符,而不是返回空值。这是因为PATINDEX找不到匹配模式时会返回0,但SQL Server里SUBSTRING的起始位置为0时会被当作1处理,所以会默认从字符串开头截取10位。

修改后的查询

SELECT 
    [Service Item Value],
    CASE 
        WHEN PATINDEX('%3C[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', [Service Item Value]) > 0
        THEN SUBSTRING(
            [Service Item Value],
            PATINDEX('%3C[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', [Service Item Value]),
            10
        )
        ELSE '' -- 若需要返回NULL而非空字符串,替换成NULL即可
    END AS [Circuit Reference]
FROM [dbo].[3c_and_2c_Report_Multiple_customers];

核心逻辑说明

  • 用CASE语句做判断:只有当PATINDEX找到有效匹配(返回值大于0)时,才执行SUBSTRING提取目标字符串;
  • 无匹配时直接返回空字符串或NULL,完全符合你想要的结果;
  • 如果你的SQL Server版本支持正则数量词(需开启相关设置),可以把模式简化为%3C[0-9]{8}%,写法更简洁,效果和重复8次[0-9]一致。

拿你提供的示例数据测试,像38159 (Cease) & 38160 (Re-Provide)这类无匹配的行,Circuit Reference会显示为空;而包含3C00156746的行,依然能精准提取目标字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:04