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

SQL Server 专栏收录该内容
2 篇文章 0 订阅

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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

victorycyz

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值