返回两个小数值之间的所有数值

3

我有两个值,数据类型为小数(15,2)

例如:

@from='19.99'

 @to='20.02'

我需要返回这两个值之间的范围。
期望输出- 19.99,20.00,20.01,20.02
3个回答

4
您可以像下面这样使用Tally / Number方法进行操作。
DECLARE @from DECIMAL(10,2) , @to DECIMAL(10,2), @interval DECIMAL(10,2)

SET @from=19.99
SET @to= 20.02
SET @interval=0.01
SELECT @from +r*@interval 
FROM
(
SELECT TOP (SELECT CAST((@to-@from)/@interval AS INT)+1)
ROW_NUMBER() OVER( ORDER BY (SELECT 1)) -1  r
FROM 
sys.objects s1 CROSS JOIN sys.objects s2
)T

Working demo


错误信息 1060,级别 15,状态 1,行 9 TOP 子句中的行数必须是整数。 - The beginner
@Thebeginner 已更新。 - DhruvJoshi
这个可以工作,但我们能简化这个查询吗? - The beginner
@Thebeginner 推荐阅读 http://www.sqlservercentral.com/articles/Tally+Table/72993/ - DhruvJoshi
这个有任何函数或方法可以实现吗? - The beginner
显示剩余2条评论

2

尝试:

DECLARE @From DECIMAL (15,2) = 19.99;
DECLARE @To DECIMAL (15,2) = 20.02;
DECLARE @Step DECIMAL (15,2) = 00.01;
DECLARE @R TABLE (Value DECIMAL(15,2));

WHILE @From <= @To
    begin
        INSERT INTO @R VALUES (@From);
        SET @From = @From + @Step;
    End
SELECT *
FROM @R;

结果:

+=======+
| Value |
+=======+
| 19,99 |
+-------+
| 20,00 |
+-------+
| 20,01 |
+-------+
| 20,02 |
+-------+

使用 CTE

DECLARE @From DECIMAL (15,2) = 19.99;
DECLARE @To DECIMAL (15,2) = 20.02;
DECLARE @Step DECIMAL (15,2) = 00.01;

WITH CTE AS(
    SELECT @Step * 1 Val
        UNION ALL
    SELECT @Step * 2
        UNION ALL
    SELECT @Step * 3
        UNION ALL
    SELECT @Step * 4
    )
  SELECT @From - @Step + CTE.Val Value FROM CTE;

结果:

+=======+
| Value |
+=======+
| 19,99 |
+-------+
| 20,00 |
+-------+
| 20,01 |
+-------+
| 20,02 |
+-------+

1
您可以使用递归CTE:
with cte as (
      select @from as val
      union all
      select cast(val + 0.01 as decimal(15,2))
      from cte
      where density < @to
     )
select val
from cte
option (MAXRECURSION 0);

注意:如果您需要插入超过100行数据,您需要探索最大递归选项。
您还可以使用“数字”表执行类似操作。

数字表方法是正确的选择。像这样使用递归CTE进行计数非常低效。请注意此文章:http://www.sqlservercentral.com/articles/T-SQL/74118/ - Alan Burstein
只用简单的查询就能实现吗? - The beginner
当我的“from”大于“to”时,无法返回正确的结果。 - The beginner
如何使用最大递归选项。 - The beginner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接