我在Server中的一个表中存储了一个长字符串,我想在每10个字符之间添加一个“逗号”。
我是在that语句的帮助下这么做的,但是它太慢了。
有什么更快的方法吗?
以下是我所做的
declare @a varchar(max) = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'
declare @i int = 1
declare @m int = 10
declare @ai varchar(max) = ''
while @i < len(@a)
begin
set @ai = @ai + ',' + SUBSTRING(@a, @i, @m)
set @i = @i + @m
end
SELECT @ai使用大表时,这种方法太慢了。
有更快的路吗?
发布于 2022-05-21 11:20:06
使用this post的可接受答案,使用String_agg和NTILE functions
DECLARE @test VARCHAR(max) = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'
SELECT String_agg( value, ',')
FROM (
SELECT String_agg( value, '') within GROUP ( ORDER BY nt1 ASC) value,
nt,
1 AS t
FROM (
SELECT substring(a.b, v.number+1, 1) value,
ntile(18) OVER( ORDER BY (
SELECT NULL) ) nt,
row_number() OVER (ORDER BY (
SELECT NULL) ) nt1
FROM (
SELECT @test b) a
JOIN master..spt_values v
ON v.number < len(a.b)
WHERE v.type = 'P') c
GROUP BY nt ) d
GROUP BY t https://stackoverflow.com/questions/72326558
复制相似问题