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

SQL Server Replace函数实现大括号内连续9替换为[0-9]咨询

T-SQL 实现全9大括号替换方案

核心逻辑

仅匹配大括号内全部为数字9的子串,将每个9替换为[0-9],其余包含非9字符的大括号段保持不变,支持任意长度的连续9。

完整实现代码

DECLARE @sNumberFormat NVARCHAR(200) = 'rand{text.here,{999}also-Random9He8re'

;WITH RecursiveReplace AS (
    -- 锚点:原始字符串作为递归起点
    SELECT 
        OriginalStr = @sNumberFormat,
        ProcessedStr = @sNumberFormat,
        StartPos = 1
    UNION ALL
    SELECT 
        OriginalStr,
        -- 判断当前大括号内是否全为9,是则替换,否则保留原段
        CASE WHEN PATINDEX('%[^9]%', SUBSTRING(ProcessedStr, LeftBracePos + 1, RightBracePos - LeftBracePos - 1)) = 0
            THEN STUFF(ProcessedStr, LeftBracePos, RightBracePos - LeftBracePos + 1, REPLICATE('[0-9]', RightBracePos - LeftBracePos - 1))
            ELSE ProcessedStr
        END,
        -- 下一次查找的起始位置跳过当前右大括号
        RightBracePos + 1
    FROM RecursiveReplace
    CROSS APPLY (
        -- 查找当前起始位置后的第一个左大括号
        SELECT LeftBracePos = CHARINDEX('{', ProcessedStr, StartPos)
    ) t1
    CROSS APPLY (
        -- 查找对应右大括号
        SELECT RightBracePos = CHARINDEX('}', ProcessedStr, LeftBracePos + 1)
    ) t2
    -- 终止条件:找不到更多成对大括号
    WHERE LeftBracePos > 0 AND RightBracePos > 0
)
-- 取递归完成后的最终结果
SELECT TOP 1 Result = ProcessedStr 
FROM RecursiveReplace
ORDER BY StartPos DESC

运行结果

输出和预期完全一致:
rand{text.here,[0-9][0-9][0-9]also-Random9He8re

兼容性说明

上述方案为原生T-SQL实现,支持SQL Server 2008及以上所有版本,无需额外开启功能权限,可直接复用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:27:03