【发布时间】:2016-03-27 12:29:03
【问题描述】:
我有一个 WHILE 循环,它应该循环 30 次,但由于某种原因,它似乎只循环了 15 次。
SQL:
DECLARE @dateInsert date
DECLARE @dateLoopTo date
DECLARE @cnt INT = 0;
SET @dateInsert='2016-01-01'
SET @dateLoopTo='2016-01-31'
WHILE @cnt <= DATEDIFF (d, @dateInsert , @dateLoopTo )
BEGIN
print CONVERT(VARCHAR(10),@dateInsert) + ' '+ CONVERT(VARCHAR(2),@cnt)
SET @dateInsert = DATEADD(d, 1,@dateInsert)
SET @cnt = @cnt + 1;
END
结果:
2016-01-01 0,
2016-01-02 1,
2016-01-03 2,
2016-01-04 3,
2016-01-05 4,
2016-01-06 5,
2016-01-07 6,
2016-01-08 7,
2016-01-09 8,
2016-01-10 9,
2016-01-11 10,
2016-01-12 11,
2016-01-13 12,
2016-01-14 13,
2016-01-15 14,
当我尝试将 DATEDIFF (d, @dateInsert , @dateLoopTo ) 更改为 30 时,SQL 似乎可以正常工作。
WHILE @cnt <= 30-- DATEDIFF (d, @dateInsert , @dateLoopTo )
返回 30 的 DATEDIFF (d, @dateInsert , @dateLoopTo ) 是否有原因不起作用?
【问题讨论】:
-
由于您在循环中更改了
dateInsert,我看不到DATEDIFF (d, @dateInsert , @dateLoopTo )在第一次迭代后仍会返回30。
标签: sql-server tsql while-loop