数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
连续编号的流水号拼接成一个字串的存储过程

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

网友提问:
---------------------------------------
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




相关文章

相关软件