我正在使用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;
运行此命令时,我希望在多个窗口中获得输出,尽管我希望它位于同一窗口中。
答案 0 :(得分:4)
您的循环正在进行选择,因此循环的每次迭代都将提供一个新的查询结果窗口。如果希望它作为一个结果集返回,则必须将其插入表中并在循环之外选择所有内容。
DECLARE @StartDate DATETIME = '2018-08-01';
DECLARE @EndDate DATETIME = '2018-08-15';
DECLARE @table TABLE (yourdate DATETIME)
WHILE @StartDate < @EndDate
BEGIN
INSERT INTO @table (yourdate)
SELECT @startdate
SET @StartDate = @StartDate+1
END;
SELECT *
FROM @Table
答案 1 :(得分:3)
您可以将recursive way与common_table_expression 结合使用:
DECLARE @StartDate DATETIME = '2018-08-01';
DECLARE @EndDate DATETIME = '2018-08-15';
WITH t AS (
SELECT @StartDate AS Startdate
UNION ALL
SELECT DATEADD(DAY, 1, Startdate)
FROM t
WHERE Startdate < @EndDate
)
SELECT Startdate
FROM t;
答案 2 :(得分:1)
尝试使用#temp
表,因为每当循环运行时,您都在选择一个新的SELECT
语句,这就是为什么它出现在另一个窗口中。要在一个窗口中获得所有结果,可以尝试使用CTE
或#temp
表。
DECLARE @StartDate DATETIME = '2018-08-01';
DECLARE @EndDate DATETIME = '2018-08-15';
CREATE TABLE #Temp
(
Date date
)
WHILE @StartDate < @EndDate
BEGIN
INSERT INTO #Temp VALUES (@StartDate)
SET @StartDate = @StartDate+1
END;
SELECT * FROM #Temp