Sql server 如何在SQL Server中使用while循环、CTE或任何其他方法生成年度日报告

Sql server 如何在SQL Server中使用while循环、CTE或任何其他方法生成年度日报告,sql-server,Sql Server,我试过这个 SELECT Day = DATEPART(DAYOFWEEK, dateColumnName), Date = dateColumnName 但输出如下所示: JAN 1 2020 TO DEC 31 2020 Result ======== 2020/01/01 2020/01/02 . . . 2020/12/21 如果您没有强烈推荐的日历表,可以使用临时理货表 范例 返回 更新CTE Declare @StartDate date = '2020-0

我试过这个

SELECT 
    Day = DATEPART(DAYOFWEEK, dateColumnName),
    Date = dateColumnName
但输出如下所示:

JAN 1 2020  TO DEC 31 2020

Result
========
2020/01/01
2020/01/02
.
.
.
2020/12/21

如果您没有强烈推荐的日历表,可以使用临时理货表

范例

返回

更新CTE

Declare @StartDate date = '2020-01-01' 
Declare @EndDate   date = '2020-12-31'

;with CTE AS
(
  Select [Date]= @StartDate
  Union All
  Select (DateAdd(DAY,1,[Date]))
   From  CTE
   Where [Date] < @EndDate
) 
SELECT *  
 From  CTE
 option (maxrecursion 0)

日历表是什么意思?我们能用CTE做同样的程序吗?@krish日历表就是。。。具有附加属性的日期表。是的,这可以在CTE中完成,但这种方法比循环和/或递归CTE性能更好。说清楚点,大师..spt_值只是一个已知的表,您可以使用任何足够大小/行的表。我们如何通过CTE实现它,您能告诉我吗,这样对CTE的工作方式会有帮助。@krish Nope,我不会这么做。无论何时何地都应该避免循环没有问题,谢谢你,它帮了我很多
D
2020-01-01
2020-01-02
2020-01-03
2020-01-04
2020-01-05
...
2020-12-31
Declare @StartDate date = '2020-01-01' 
Declare @EndDate   date = '2020-12-31'

;with CTE AS
(
  Select [Date]= @StartDate
  Union All
  Select (DateAdd(DAY,1,[Date]))
   From  CTE
   Where [Date] < @EndDate
) 
SELECT *  
 From  CTE
 option (maxrecursion 0)