如何在T-SQL中用正则表达式替换Riched20匹配内容?
在T-SQL中替换所有
Riched20 ...}格式的内容 方案1:SQL Server 2017及以上版本(支持原生正则替换)
SQL Server 2017及后续版本提供了REGEXP_REPLACE函数,可直接用正则表达式匹配并替换目标内容。
如果要匹配**Riched20开头、任意内容直到第一个}**的格式,使用非贪婪模式的正则:
SET @data = REGEXP_REPLACE(@data, 'Riched20.*?}', '', 1, 0, '');
Riched20:匹配固定前缀.*?:非贪婪匹配任意字符(避免一次性匹配到多个})}:匹配结尾的闭合符号- 后续参数
1,0,''表示从第1个字符开始匹配、替换所有匹配项,不指定额外匹配选项(默认不区分大小写,如需区分可传入'c')
如果需要更精确匹配版本号格式(比如仅匹配Riched20 数字.数字}),可调整正则:
SET @data = REGEXP_REPLACE(@data, 'Riched20 \d+\.\d+}', '', 1, 0, '');
\d+:匹配1个或多个数字\.:匹配点号(转义后的特殊字符)
方案2:SQL Server 2016及更早版本(无原生正则支持)
对于不支持REGEXP_REPLACE的旧版本,可通过PATINDEX结合循环实现替换:
WHILE PATINDEX('%Riched20%}', @data) > 0 BEGIN -- 找到匹配内容的起始位置 DECLARE @startPos INT = PATINDEX('%Riched20%}', @data); -- 找到对应结尾的`}`位置 DECLARE @endPos INT = CHARINDEX('}', @data, @startPos); -- 替换掉匹配的内容 SET @data = STUFF(@data, @startPos, @endPos - @startPos + 1, ''); END
这个逻辑会循环查找所有Riched20...}格式的内容,逐个替换为空字符串,直到没有匹配项为止。
内容的提问来源于stack exchange,提问作者ZedZip
相关产品推荐
相关产品推荐

