连续编号的流水号拼接成一个字串的存储过程
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
---------------------------------------
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
相关文章推荐
- 连续编号的流水号拼接成一个字串的存储过程
- 一个自动产生编号的存储过程,数据库sql2000或2005
- 一个用来生成流水号的存储过程
- 一个生成订单流水号的存储过程
- [导入]创建一个存储过程,根据系部编号查出男生、女生人数
- 好久没来了。共享一个自动生成编号的存储过程
- 一个自动产生编号的存储过程,数据库sql2000或2005
- 一个MSSql的存储过程---生成编码,形如HEAD20060512000001;(头+日期+6位递增整数)后面为六位,每新的一年编号重新归0
- 一个用来生成流水号的存储过程
- c#定义一个方法,根据存储过程名称和存储过程参数数组,执行对应的存储过程
- 调用存储过程的复合搜索(分别绑定)和拼接字符串的复合搜索
- oracle中PLSQL存储过程中如何使用逗号分隔的集合(逗号分隔字符串转换为一个集合)
- 发布一个存储过程定义查看的小工具
- 一个通用的分页存储过程(原创)
- 分享一个收缩数据库日志文件的存储过程
- 前段时间写的一个关于成本计算的存储过程!
- 一个用CLR写存储过程的项目回顾 (二) 快速入门
- 利用SQL存储过程生成程序编号的一种方法
- 浅析SQL SERVER一个没有公开的存储过程
- 一个向sql server 2005导入excell的存储过程