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

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

网友提问:

---------------------------------------

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航