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

TSQL如何实现字符串每隔2个字符替换1个字符为“.”的功能

TSQL 每隔2个字符替换为“.”的实现方案

方案1:嵌套STUFF函数(适合最长50字符的场景)

你待处理的字符串最长仅50个字符,需要替换的位置为3、5、7...49,最多24层嵌套,直接嵌套STUFF即可实现叠加替换效果,逻辑简单易维护:

-- 示例:处理字符串'abcdefghi'
SELECT STUFF(
    STUFF(
        STUFF(
            STUFF('abcdefghi', 3, 1, '.'),
        5, 1, '.'),
    7, 1, '.'),
9, 1, '.') AS result

如果要兼容最长50字符的所有情况,补全后续STUFF嵌套即可,超出字符串实际长度的STUFF操作不会报错,会直接返回原字符串。

方案2:递归CTE实现(通用任意长度场景)

如果不想手动写多层嵌套,可使用递归CTE自动遍历所有需要替换的位置,适配任意长度的输入字符串:

DECLARE @inputStr VARCHAR(50) = 'abcdefghi';

WITH RecurReplace AS (
    -- 初始状态:待替换位置从3开始
    SELECT @inputStr AS str, 3 AS pos
    UNION ALL
    -- 递归替换:每次替换当前位置的字符,位置+2,直到超过字符串长度
    SELECT STUFF(str, pos, 1, '.'), pos + 2
    FROM RecurReplace
    WHERE pos <= LEN(str)
)
-- 取递归最后一轮的结果
SELECT TOP 1 str AS result
FROM RecurReplace
ORDER BY pos DESC

逻辑说明

  • 递归初始锚点定义原始字符串和第一个要替换的位置3
  • 每次递归调用对当前位置执行替换,位置向后偏移2位
  • 当位置超过字符串总长度时停止递归
  • 最后取位置最大的那一条记录,就是全部替换完成的结果

两种方案测试输入abcdefghi时,输出均为ab.de.gh.,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:36:00