連續編號的流水號拼接成一個字串的預存程序

來源:互聯網
上載者:User
預存程序|流水號
網友提問:
---------------------------------------
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



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。