Tsql 在值中每n个字符添加一个逗号
我的问题很简单。我从sql select中获取一个值,如下所示:Tsql 在值中每n个字符添加一个逗号,tsql,Tsql,我的问题很简单。我从sql select中获取一个值,如下所示: ARAMAUBEBABRBGCNDKDEEEFOFIFRGEGRIEISITJPYUCAKZKG AR,AM,AU,BE,BA,BR,BG,CN,DK,DE,EE,FO,FI,FR,GE,GR,IE,IS,IT,JP,YU,CA,KZ,KG 我需要这样: ARAMAUBEBABRBGCNDKDEEEFOFIFRGEGRIEISITJPYUCAKZKG AR,AM,AU,BE,BA,BR,BG,CN,DK,DE,EE,FO,F
ARAMAUBEBABRBGCNDKDEEEFOFIFRGEGRIEISITJPYUCAKZKG
AR,AM,AU,BE,BA,BR,BG,CN,DK,DE,EE,FO,FI,FR,GE,GR,IE,IS,IT,JP,YU,CA,KZ,KG
我需要这样:
ARAMAUBEBABRBGCNDKDEEEFOFIFRGEGRIEISITJPYUCAKZKG
AR,AM,AU,BE,BA,BR,BG,CN,DK,DE,EE,FO,FI,FR,GE,GR,IE,IS,IT,JP,YU,CA,KZ,KG
每个数据集中的长度不同。
我尝试了格式,东西等等,但没有给我带来我需要的结果
提前感谢gbn的评论是完全正确的,如果不是很圆滑的话:TSQL对于字符串操作来说是一种糟糕的语言,但是如果你编写一个CLR函数来实现这一点,那么你将拥有两全其美的优势:。从纯TSQL调用的NET字符串函数。是时候更新你的简历了
create function DontDoThis (
@string varchar(max),
@count int
)
returns varchar(max)
as
begin
declare @result varchar(max) = ''
declare @token varchar(max) = ''
while DATALENGTH(@string) > 0
begin
select @token = left(@string, @count)
select @string = REPLACE(@string, @token, '')
select @result += @token + case when DATALENGTH(@string) = 0 then '' else ',' end
end
return @result
end
电话:
只需一点和for xml路径的帮助
试穿一下我相信这就是QQping想要的
-- select .dbo.DelineateEachNth('ARAMAUBEBABRBGCNDKDEEEFOFIFRGEGRIEISITJPYUCAKZKG',2,',')
create function DelineateEachNth
(
@str varchar(max), -- Incoming String to parse
@length int, -- Length of desired segment
@delimiter varchar(100) -- Segment delimiter (comma, tab, line-feed, etc)
)
returns varchar(max)
AS
begin
declare @resultString varchar(max) = ''
-- only set delimiter(s) when lenght of string is longer than desired segment
if LEN(@str) > @length
begin
-- continue as long as there is a remaining string to parse
while len(@str) > 0
begin
-- as long as know we still need to create a segment...
if LEN(@str) > @length
begin
-- build result string from leftmost segment length
set @resultString = @resultString + left(@str, @length) + @delimiter
-- continually shorten result string by current segment
set @str = right(@str, len(@str) - @length)
end
-- as soon as the remaining string is segment length or less,
-- just use the remainder and empty the string to close the loop
else
begin
set @resultString = @resultString + @str
set @str = ''
end
end
end
-- if string is less than segment length, just pass it through
else
begin
set @resultString = @str
end
return @resultString
end
在我的帮助下
为什么必须在SQL中执行此操作?您想在记录集中的多行上执行此操作,每行的格式不同吗?格式必须以相同的方式仅应用于一行。只有值的长度不同,但每个值都可以被2整除。它必须是SQL语言。不知道为什么,但我的老板希望这样。你的老板是一个木偶,因为他口授你必须使用的解决方案。祝你好运。我对sql几乎一无所知,但在快速搜索之后,你能不能用SUBSTRING拆分字符串,用CONCAT在每个字符串后面加一个逗号,然后用CONCAT再次将它们连接起来?
select Wow=
(select case when MatchIndex %2 = 0 and MatchIndex!=0 then ',' + match else match end
from dbo.RegExMatches('[^\n]','ARAMAUBEBABRBGCNDKDEEEFOFIFRGEGRIEISITJPYUCAKZKG',1)
for xml path(''))