如何在两个数字之间生成一系列数字?我有两个数字作为用户的输入,例如1000和1050.如何使用SQL查询在分隔行中生成这两个数字之间的数字?我想要这个: 1000
1001
1002
1003
.
.
1050
3 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
属性选择非持久化值。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
演示
江户川乱折腾
TA贡献1851条经验 获得超5个赞
DECLARE @startnum INT=1000DECLARE @endnum INT=1050;WITH gen AS ( SELECT @startnum AS num UNION ALL SELECT num+1 FROM gen WHERE num+1<=@endnum)SELECT * FROM genoption (maxrecursion 10000)
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
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;
- 3 回答
- 0 关注
- 572 浏览
添加回答
举报
0/150
提交
取消