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

SQL Server如何删除符合「_+12个字符」模式的子串

问题原因

SQL Server 原生的PATINDEX函数不支持标准正则表达式的\S、{n}这类语法,同时如果你要匹配字面量下划线,必须将其放在方括号[]中转义,否则下划线会被识别为「匹配任意单个字符」的通配符,这就是你之前的写法匹配不到结果的原因。

实现方案

单处匹配场景(多数场景)

如果你的数据里每一行最多只有一处符合「下划线+12个字符」规则的子串,直接用PATINDEX搭配STUFF函数即可实现:

SELECT 
    CASE
        -- 匹配规则:字面量下划线 + 12个任意字符
        WHEN PATINDEX('%[_]____________%', myCol) > 0
        -- 从匹配位置开始删除13个字符(下划线+12个目标字符)
        THEN STUFF(myCol, PATINDEX('%[_]____________%', myCol), 13, '')
        ELSE myCol
    END AS processed_col
FROM your_table

如果需要严格限定要删除的12个字符中不包含下划线,避免误删,可以把匹配规则改成:
PATINDEX('%[_][^_][^_][^_][^_][^_][^_][^_][^_][^_][^_][^_][^_]%', myCol)
这里的[^_]表示匹配任意非下划线的单个字符。

多处匹配场景

如果一行数据里存在多处符合规则的子串,可以循环执行UPDATE语句直到没有匹配项为止:

WHILE 1=1
BEGIN
    UPDATE your_table
    SET myCol = STUFF(myCol, PATINDEX('%[_]____________%', myCol), 13, '')
    WHERE PATINDEX('%[_]____________%', myCol) > 0
    
    IF @@ROWCOUNT = 0 BREAK
END
效果验证
  • 示例1:输入Winter_QZ6P91712017_115BPM,处理后输出Winter_115BPM
  • 示例2:输入cpx_Note In My Calendar_QZ6P91707044,处理后输出cpx_Note In My Calendar

内容的提问来源于stack exchange,提问作者Marco Ferrè

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:57:02