连续编号的流水号拼接成一个字串的存储过程
2004-10-18 20:18
281 查看
网友提问:
---------------------------------------
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
---------------------------------------
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
相关文章推荐
- 连续编号的流水号拼接成一个字串的存储过程
- 一个自动产生编号的存储过程,数据库sql2000或2005
- [导入]创建一个存储过程,根据系部编号查出男生、女生人数
- 一个用来生成流水号的存储过程
- 一个自动产生编号的存储过程,数据库sql2000或2005
- 一个MSSql的存储过程---生成编码,形如HEAD20060512000001;(头+日期+6位递增整数)后面为六位,每新的一年编号重新归0
- 一个生成订单流水号的存储过程
- 好久没来了。共享一个自动生成编号的存储过程
- 一个用来生成流水号的存储过程
- 一个由表结构生成表的存储过程
- SQL_编写一个简单的删除员工信息的存储过程
- 备份一个数据库中每个表的100条数据的存储过程
- 给SQL补充一个查看表结构的存储过程
- 一个存储过程插入两个表数据,获得最近标识值
- 存储过程内建临时表和临时函数,合并一个由存储过程返回的表
- 一个通用查询的存储过程
- 可在任何一个表(或视图)中按任何一个字段值进行查询的通用存储过程(精确查询)
- mysql 多日志表结果集合拼接存储过程
- MySQL存储过程里字符串拼接返回参数的方法
- C#获取一个即返回结果集,又返回值的存储过程