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

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

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

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

 1000
 1001
 1002
 1003
 .
 .
 1050


慕勒3428872
浏览 818回答 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&nbsp;DISTINCT&nbsp;n&nbsp;=&nbsp;number&nbsp; FROM&nbsp;master..[spt_values]&nbsp;WHERE&nbsp;number&nbsp;BETWEEN&nbsp;@start&nbsp;AND&nbsp;@end演示请注意,该表的最大值为2048,因为这些数字有空白。下面是一种稍微好一点的使用系统视图的方法(因为来自SQLServer 2005):;WITH&nbsp;Nums&nbsp;AS( &nbsp;&nbsp;SELECT&nbsp;n&nbsp;=&nbsp;ROW_NUMBER()&nbsp;OVER&nbsp;(ORDER&nbsp;BY&nbsp;[object_id])&nbsp; &nbsp;&nbsp;FROM&nbsp;sys.all_objects&nbsp; )SELECT&nbsp;n&nbsp;FROM&nbsp;Nums&nbsp; WHERE&nbsp;n&nbsp;BETWEEN&nbsp;@start&nbsp;AND&nbsp;@endORDER&nbsp;BY&nbsp;n;演示或者使用自定义的数字表。感谢亚伦·伯特兰,我建议阅读整篇文章:生成没有循环的集合或序列
打开App,查看更多内容
随时随地看视频慕课网APP