中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > 数据库综合
连续编号的流水号拼接成一个字串的存储过程
作者:未知 时间:2004-10-18 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无

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

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有