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

TSQL中如何在每第3个竖线|的指定位置插入特殊字符@

TSQL实现每第3个竖线后插入@字符功能

需求说明

对输入的字符串逐次统计竖线|的数量,每数到第3个竖线时,在该竖线的后方插入@字符,效果参考如下示例:

示例1:
输入:'12Hr|AP,1.8|KR,10.8|KE,10.8|TN,2.9|'
输出:'12Hr|AP,1.8|KR,10.8|@KE,10.8|TN,2.9|'

示例2:
输入:'12Hr|AP,1.8|KR,10.8|KE,10.8|TN,2.9|UP,3.40|KR,4.9|'
输出:'12Hr|AP,1.8|KR,10.8|@KE,10.8|TN,2.9|UP,3.40|@KR,4.9|SS,4.9|AP,7.3|@'

实现代码

直接创建自定义标量函数即可全局调用:

CREATE FUNCTION dbo.InsertAtAfterThirdPipe(@InputStr NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @OutputStr NVARCHAR(MAX) = N''
    DECLARE @PipeCount INT = 0
    DECLARE @Index INT = 1
    DECLARE @CurrentChar NCHAR(1)

    WHILE @Index <= LEN(@InputStr)
    BEGIN
        SET @CurrentChar = SUBSTRING(@InputStr, @Index, 1)
        SET @OutputStr += @CurrentChar

        IF @CurrentChar = N'|'
        BEGIN
            SET @PipeCount += 1
            -- 每数到第3个竖线追加@
            IF @PipeCount % 3 = 0
            BEGIN
                SET @OutputStr += N'@'
            END
        END

        SET @Index += 1
    END

    RETURN @OutputStr
END

调用示例

-- 测试示例1
SELECT dbo.InsertAtAfterThirdPipe(N'12Hr|AP,1.8|KR,10.8|KE,10.8|TN,2.9|')

-- 测试示例2
SELECT dbo.InsertAtAfterThirdPipe(N'12Hr|AP,1.8|KR,10.8|KE,10.8|TN,2.9|UP,3.40|KR,4.9|')

注意事项

  • 若仅需要处理VARCHAR类型输入,将函数内的NVARCHAR改为VARCHAR、去掉字符串前的N前缀即可
  • 函数兼容SQL Server 2008及以上所有版本
  • 不需要长期保留函数的场景,也可以把逻辑改写为递归CTE嵌入单次查询使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:57:04