How to generate a range of numbers between two numbers?

后端 未结 30 2352
执念已碎
执念已碎 2020-11-22 10:16

I have two numbers as input from the user, like for example 1000 and 1050.

How do I generate the numbers between these two numbers, using

30条回答
  •  眼角桃花
    2020-11-22 10:37

    Here are couple quite optimal and compatible solutions:

    USE master;
    
    declare @min as int;    set @min = 1000;
    declare @max as int;    set @max = 1050;    --null returns all
    
    --  Up to 256 - 2 048 rows depending on SQL Server version
    select  isnull(@min,0)+number.number  as  number
    FROM    dbo.spt_values  AS  number
    WHERE   number."type"                   =   'P'     --integers
        and (   @max                            is null     --return all
            or  isnull(@min,0)+number.number    <=  @max    --return up to max
        )
    order by    number
    ;
    
    --  Up to 65 536 - 4 194 303 rows depending on SQL Server version
    select  isnull(@min,0)+value1.number+(value2.number*numberCount.numbers)  as  number
    FROM  dbo.spt_values            AS  value1
      cross join  dbo.spt_values    AS  value2
      cross join (  --get the number of numbers (depends on version)
        select  sum(1)  as  numbers
        from    dbo.spt_values
        where   spt_values."type"   =   'P' --integers
      )                             as  numberCount
    WHERE   value1."type" = 'P'   --integers
        and value2."type" = 'P'   --integers
        and (   @max    is null     --return all
            or  isnull(@min,0)+value1.number+(value2.number*numberCount.numbers)    
                <=  @max            --return up to max
        )
    order by    number
    ;
    

提交回复
热议问题