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
相关产品推荐
相关产品推荐

