【发布时间】:2019-01-22 09:45:42
【问题描述】:
我正在使用 sql 中的 While 循环,并尝试在这些日期应用代码。
DECLARE @StartDate DATETIME = '2018-08-01';
DECLARE @EndDate DATETIME = '2018-08-15';
WHILE @StartDate < @EndDate
BEGIN
SELECT @StartDate
SET @StartDate = @StartDate+1
END;
当我运行它时,虽然我希望它在同一个窗口中,但我会在多个窗口中获得输出。
【问题讨论】:
-
创建一个临时表并在每次迭代时插入,当循环退出时,选择你的临时表。
-
或者用
PRINT @StartDate代替SELECT @StartDate -
您实际上想要完成什么?这闻起来像 XY 问题 (xyproblem.info)
-
不要使用 + 来添加日期...这种方法有时会起作用,最终你会得到意想不到的结果。即,如果您使用其他日期类型,或者您想添加除一天之外的其他内容。总是使用
dateadd来避免这种情况。 -
例如,基于集合的处理方法可能假设您已经在数据库中构建了一个 calendar 表(每天一行,列您可能每天都想知道有趣的事情,例如您的组织是否认为这是一个工作日)。然后,您只需从该表中获取
SELECT,其中日期位于您的两个端点之间。 (很多人对日历表的想法有一个直觉的反应——“它最终不会包含很多行吗?”——没有意识到 20 年小于 10000。非常小)
标签: sql sql-server