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

SQL Server 2014如何批量替换字符串中所有3字符加横杠的前缀内容

解决SQL Server 2014批量删除所有「3个字符+横杠」格式内容的方案

由于SQL Server 2014不支持正则替换,也没有高版本的TRANSLATE/REGEXP_REPLACE函数,我们可以通过递归CTE + 通配符匹配 + 字符串裁剪的方式实现全量替换,兼容你现有的测试表结构,完整可运行代码如下:

WITH RecursiveReplace AS (
    -- 锚点:初始化原始数据,查找第一个匹配项的位置
    SELECT 
        someValue AS originalValue,
        someValue AS currentValue,
        -- 通配符规则可按需调整:
        -- 匹配任意3字符+横杠用 '%___-%'
        -- 仅匹配3个英文字母+横杠用 '%[a-zA-Z][a-zA-Z][a-zA-Z]-%'
        PATINDEX('%[a-zA-Z][a-zA-Z][a-zA-Z]-%', someValue) AS matchPos
    FROM String_Removal_Example
    UNION ALL
    -- 递归:每次删除1个匹配项,继续查找下一个
    SELECT 
        originalValue,
        STUFF(currentValue, matchPos, 4, ''),
        PATINDEX('%[a-zA-Z][a-zA-Z][a-zA-Z]-%', STUFF(currentValue, matchPos, 4, ''))
    FROM RecursiveReplace
    WHERE matchPos > 0
)
-- 取递归结束后无匹配项的最终结果
SELECT originalValue, currentValue AS cleanedValue
FROM RecursiveReplace
WHERE matchPos = 0
-- 递归深度默认100,单条字符串最长匹配数不超过100可不用修改
OPTION (MAXRECURSION 100);

代码说明

  • PATINDEX支持通配符匹配,会返回第一个符合规则的子串起始位置,不存在匹配则返回0
  • STUFF函数直接裁剪掉从匹配位置开始的4个字符(3个匹配字符+1个横杠)
  • 递归会循环执行替换逻辑,直到整条字符串没有符合规则的内容为止

测试结果

针对你提供的测试数据,输出结果如下:

originalValuecleanedValue
abc-123123
abc-123 ABC-123123 123
abc-123 ABc-123 123-ABC DEF-123123 123 123-ABC 123

如果你需要删除所有3个任意字符+横杠的内容(包含数字开头的123-),只需把PATINDEX的通配符规则改为%___-%即可,第三行的输出会变为123 123 ABC 123,完全符合你的需求示例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:07