How to generate a range of numbers between two numbers?

后端 未结 30 2531
执念已碎
执念已碎 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:28

    This uses procedural code and a table-valued function. Slow, but easy and predictable.

    CREATE FUNCTION [dbo].[Sequence] (@start int, @end int)
    RETURNS
    @Result TABLE(ID int)
    AS
    begin
    declare @i int;
    set @i = @start;
    while @i <= @end 
        begin
            insert into @result values (@i);
            set @i = @i+1;
        end
    return;
    end
    

    Usage:

    SELECT * FROM dbo.Sequence (3,7);
    ID
    3
    4
    5
    6
    7
    

    It's a table, so you can use it in joins with other data. I most frequently use this function as the left side of a join against a GROUP BY hour, day etc to ensure a contiguous sequence of time values.

    SELECT DateAdd(hh,ID,'2018-06-20 00:00:00') as HoursInTheDay FROM dbo.Sequence (0,23) ;
    
    HoursInTheDay
    2018-06-20 00:00:00.000
    2018-06-20 01:00:00.000
    2018-06-20 02:00:00.000
    2018-06-20 03:00:00.000
    2018-06-20 04:00:00.000
    (...)
    

    Performance is uninspiring (16 seconds for a million rows) but good enough for many purposes.

    SELECT count(1) FROM [dbo].[Sequence] (
       1000001
      ,2000000)
    GO
    

提交回复
热议问题