您的位置:首页 > 其它

连续编号的流水号拼接成一个字串的存储过程

2008-04-26 23:04 218 查看
网友提问:
---------------------------------------
Test1表
IDstartend
1 1 5
2 6 10
3 21 25
4 26 30
5 51 60
希望得到结果:
string: 1-10,21-30,51-60
---------------------------------------

用变量拼接字串的解法:

--建测试表:
createtabletest1(idint,startint,[end]int)

--添加测试数据:
inserttest1select1,1,5
unionselect2,6,10
unionselect3,21,25
unionselect4,26,30
unionselect5,51,60

--建立拼接字串的函数:
createprocedureproA
as
begin

declare@svarchar(8000)

--给变量赋表中第一行的相应值,cast(min(start)-1这里是为了配合后面的全表查询中的第一行给正确地接上。注意,如果流水号是从0开始,'-'要相应用其他字符如“+”号替代,最后select@s时,再改回‘-’号,具体的语句是:selectreplace(@s,'+','-'):
select@s=+cast(min(start)asvarchar(10))+'-'
+cast(min(start)-1asvarchar(10))
fromtest1

--顺序查询并拼接字串:
select@s=left(@s,len(@s)-charindex('-',reverse(@s))+1)
+casewhencast(right(@s,charindex('-',reverse(@s))-1)asint)+1
=start
thencast([end]asvarchar(20))
elseright(@s,charindex('-',reverse(@s))-1)+','
+cast(startasvarchar(10))+'-'
+cast([end]asvarchar(10))
end
fromtest1
orderbystart

--返回结果:
select@s

end

--删除测试表:
droptabletest1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: