如何生成两个数字之间的数字范围?

新手上路,请多包涵

我有两个数字作为用户输入,例如 10001050

如何使用 sql 查询在单独的行中生成这两个数字之间的数字?我要这个:

  1000
 1001
 1002
 1003
 .
 .
 1050

原文由 user3211705 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 393
1 个回答
CREATE OR ALTER FUNCTION [dbo].[RangeGenerator](
    @Start  BIGINT
,   @Stop   BIGINT
,   @Step   BIGINT
)
RETURNS TABLE AS RETURN (

    WITH [Initial] AS (
        SELECT
            [n]
        FROM (VALUES
            (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ,   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ,   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ,   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ,   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ,   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ,   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ,   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ,   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ,   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)
        ) AS [t]([n])
    )
    SELECT TOP ((@Stop - @Start) / @Step + 1)
        [n] = @Start + ROW_NUMBER() OVER (ORDER BY [i0].[n]) * @Step - @Step
    FROM        [Initial]   AS  [i0] /*       100 */
    CROSS JOIN  [Initial]   AS  [i1] /*     10000 */
    CROSS JOIN  [Initial]   AS  [i2] /*   1000000 */
    ORDER BY 1

);
GO

SELECT [n] FROM [dbo].[RangeGenerator](0, 100, 2);

原文由 Juozas 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进