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

SQL Server 2016 REPLACE函数无法精确匹配,表现类似LIKE模糊匹配

问题解决说明

REPLACE函数默认执行子串全匹配,只要字符串中包含目标子串就会触发替换,你需要替换的SOB40是SOB400的前缀,所以会误匹配SOB400的前半部分,替换后遗留多余的0。
针对你的场景有两种可行的解决方案:

方案1:匹配完整边界(适配你当前的字符串结构)

观察你提供的JSON结构,SOB40后固定紧跟],你可以补全匹配边界避免误命中,只需修改你的REPLACE语句即可:

DECLARE @x varchar(max) = '[{"propertyName":"Test","propertyValue":"12345"}]',
        @y varchar(max) =
        '{{"sNumber":40,"name":"bush","description":"bush","suggested":["nnm"],"Names":["676"],"behaviors":["uy"],"documents":[],"propertyValues":[{ "propertyName": "OPs", "propertyValue": "08/26 13:22" },SOB40]},{"sNumber":400,"name":"as","description":"u","Names":["jll"],"documents":"5656","propertyValues":[{ "propertyName": "nn", "propertyValue": "01/05 12:59" },SOB400]}}'

-- 仅修改REPLACE的匹配和替换内容,补全]边界
SELECT
    @x = REPLACE(@y, ',SOB40]', ',' + SUBSTRING(@x, 2, LEN(@x) - 2) + ']')

SELECT @x

方案2:通用长短串占位替换(不依赖字符串结构)

如果后续SOB40后可能跟其他字符,可使用「长串先占位→替换短串→还原长串」的逻辑,不需要依赖正则函数:

DECLARE @x varchar(max) = '[{"propertyName":"Test","propertyValue":"12345"}]',
        @y varchar(max) =
        '{{"sNumber":40,"name":"bush","description":"bush","suggested":["nnm"],"Names":["676"],"behaviors":["uy"],"documents":[],"propertyValues":[{ "propertyName": "OPs", "propertyValue": "08/26 13:22" },SOB40]},{"sNumber":400,"name":"as","description":"u","Names":["jll"],"documents":"5656","propertyValues":[{ "propertyName": "nn", "propertyValue": "01/05 12:59" },SOB400]}}',
        @tempPlaceholder varchar(50) = 'TEMP_SOB400_PLACEHOLDER'

-- 第一步:将SOB400替换为临时占位符,避免被误匹配
SET @y = REPLACE(@y, 'SOB400', @tempPlaceholder)
-- 第二步:替换目标串SOB40
SET @y = REPLACE(@y, ',SOB40', ',' + SUBSTRING(@x, 2, LEN(@x) - 2))
-- 第三步:将占位符还原为SOB400
SET @x = REPLACE(@y, @tempPlaceholder, 'SOB400')

SELECT @x

两种方案都可以完全避免误替换SOB400的问题,不需要额外安装自定义函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:30:05