请问如何在两个数字之间生成一系列数字?

如何在两个数字之间生成一系列数字?

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

如何使用SQL查询在分隔行中生成这两个数字之间的数字?我想要这个:

 1000
 1001
 1002
 1003
 .
 .
 1050


蝴蝶不菲
浏览 573回答 3
3回答

胡说叔叔

属性选择非持久化值。VALUES关键词。然后使用JOIN生成大量和大量的组合(可以扩展到创建数十万行和更多行)。SELECT ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.nFROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),      (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n),      (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) hundreds(n),      (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) thousands(n)      WHERE ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n BETWEEN @userinput1 AND @userinput2ORDER BY 1演示一种较短的备选办法,这并不容易理解:WITH x AS (SELECT n FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) v(n)) SELECT ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.nFROM x ones,      x tens,          x hundreds,             x thousandsORDER BY 1演示

江户川乱折腾

另一种解决方案是递归CTE:DECLARE&nbsp;@startnum&nbsp;INT=1000DECLARE&nbsp;@endnum&nbsp;INT=1050;WITH&nbsp;gen&nbsp;AS&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;@startnum&nbsp;AS&nbsp;num&nbsp;&nbsp;&nbsp;&nbsp;UNION&nbsp;ALL &nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;num+1&nbsp;FROM&nbsp;gen&nbsp;WHERE&nbsp;num+1<=@endnum)SELECT&nbsp;*&nbsp;FROM&nbsp;genoption&nbsp;(maxrecursion&nbsp;10000)

天涯尽头无女友

SELECT DISTINCT n = number  FROM master..[spt_values] WHERE number BETWEEN @start AND @end演示请注意,该表的最大值为2048,因为这些数字有空白。下面是一种稍微好一点的使用系统视图的方法(因为来自SQLServer 2005):;WITH Nums AS(   SELECT n = ROW_NUMBER() OVER (ORDER BY [object_id])    FROM sys.all_objects  )SELECT n FROM Nums  WHERE n BETWEEN @start AND @endORDER BY n;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server