网友提问: --------------------------------------- Test1表 ID start end 1 1 5 2 6 10 3 21 25 4 26 30 5 51 60 希望得到结果: string: 1-10,21-30,51-60 ---------------------------------------
用变量拼接字串的解法:
--建测试表: create table test1 ( id int,start int,[end] int)
--添加测试数据: insert test1 select 1,1,5 union select 2,6,10 union select 3,21,25 union select 4,26,30 union select 5,51,60
--建立拼接字串的函数: create procedure proA as begin
declare @s varchar(8000)
--给变量赋表中第一行的相应值, cast(min(start)-1 这里是为了配合后面的全表查询中的第一行给正确地接上。注意,如果流水号是从0开始,'-'要相应用其他字符如“+”号替代,最后 select @s 时,再改回‘-’号,具体的语句是:select replace(@s,'+','-'): select @s= + cast(min(start) as varchar(10)) + '-' + cast(min(start)-1 as varchar(10)) from test1
--顺序查询并拼接字串: select @s= left(@s,len(@s)-charindex('-',reverse(@s))+1) + case when cast(right(@s,charindex('-',reverse(@s))-1) as int)+1 =start then cast([end] as varchar(20)) else right(@s,charindex('-',reverse(@s))-1) + ',' + cast(start as varchar(10)) + '-' + cast([end] as varchar(10)) end from test1 order by start
--返回结果: select @s
end
--删除测试表: drop table test1

|