最近碰到个很有意思的需求,需要把一些正整数区间拆分成一个一个的数字。

比如要将

起始数    终止数

14           16

21            25

35            35

43            46


拆分成

14

15

16

21

22

23

24

25

35

43

44

45

46

在百度上搜了半天只找到Oracle版本的脚本,链接:https://blog.csdn.net/daiqiulong2/article/details/48859485

无奈本人用的是SQLSERVER数据库,只能自己动手用游标解决了。脚本如下:

create table #原始数据 (起始数 int ,结束数 int)
insert into #原始数据 values (14,16)
insert into #原始数据 values (21,25)
insert into #原始数据 values (35,35)
insert into #原始数据 values (43,46)

create table #处理后数据 (num int)

DECLARE @起始数 int , @结束数 int
DECLARE cur CURSOR FAST_FORWARD READ_ONLY FOR
select 起始数,结束数 from #原始数据 ORDER BY 起始数 ASC

OPEN cur
FETCH NEXT FROM cur INTO @起始数,@结束数

WHILE @@FETCH_STATUS = 0
begin
  declare @i int=@起始数
  while @i <= @结束数
  begin
    insert into #处理后数据 values (@i)
    set @i = @i+1
  end
  FETCH NEXT FROM cur INTO  @起始数,@结束数
end

CLOSE cur
DEALLOCATE cur

select num from #处理后数据 ORDER BY num

drop table #原始数据
drop table #处理后数据