如何生成从 sql 中的特定星期一到当前日期的 table 星期一日期

how to generate a table of Monday dates that from a specific Monday to current date in sql

在 SQL 服务器中,我需要生成截至当前日期的 table 个星期一。 开始日期始终是 2020-04-27,即星期一。 例如,如果今天是 2020-05-25,我需要一个 table,如下所示:

    date
0   2020-04-27
1   2020-05-04
2   2020-05-11
3   2019-05-18
4   2019-05-25

如果今天的日期是 2020-05-23,那么它是:

    date
0   2020-04-27
1   2020-05-04
2   2020-05-11
3   2019-05-18

我怎样才能产生那样的 table?

您可以使用递归 CTE 生成日期列表:

WITH mondays AS (
  SELECT CAST('2020-04-27' AS date) AS monday
  UNION ALL
  SELECT DATEADD(WEEK, 1, monday)
  FROM mondays
  WHERE DATEADD(WEEK, 1, monday) <= GETDATE()
)
SELECT *
FROM mondays

输出:

monday
2020-04-27
2020-05-04
2020-05-11
2020-05-18

Demo on dbfiddle

请注意,如果要生成超过 100 个日期的列表,则需要增加最大递归级别(默认为 100)。这可以通过在查询末尾添加 OPTION (MAXRECURSION 0) 来完成,即

SELECT *
FROM mondays
OPTION (MAXRECURSION 0)

使用master..spt_values这个默认table达到这个

DECLARE @DATEFROM DATE ='2020-04-27',
@DATETO DATE= '2020-05-25'

SELECT ALLDATES AS MONDATES FROM 
(SELECT DATEADD(D, NUMBER, @DATEFROM) AS ALLDATES FROM MASTER..SPT_VALUES 
WHERE TYPE = 'P' AND NUMBER BETWEEN 0 AND DATEDIFF(DD, @DATEFROM,   @DATETO)) AS D1    
WHERE DATENAME(DW, D1.ALLDATES)IN('MONDAY')