首页 > 解决方案 > 如何在一个范围内添加日期

问题描述

我需要在表格中插入一系列日期以及相应的列数据。我的表的最早日期停止在 2017-3-16,但我需要添加可追溯到 2016-1-1 的日期。请参阅下面的屏幕截图以供参考:

在此处输入图像描述

我确定我可以使用 datepart、datename 等函数确定如何确定星期几、日期类型等。我不确定的是如何在 2016 年之间插入一系列日期-1-1 和 2017-3-15。

标签: sql-server

解决方案


我把这个片段放在手边,因为它经常需要。只需设置最高和最低日期变量,然后在 CalendarDate 字段中加入您的日期。如果日期间隔没问题,则 INNER JOIN,否则 LEFT JOIN。

  DECLARE @StartDate DATETIME = '01/01/2015' 
  DECLARE @EndDate DATETIME = '12/01/2016' 

;WITH OrderedDays as 
( 
    SELECT CalendarDate = @StartDate
    UNION ALL 
    SELECT CalendarDate = DATEADD(DAY, 1, CalendarDate)
    FROM OrderedDays WHERE DATEADD (DAY, 1, CalendarDate) <= @EndDate 
),
Calendar AS
(
    SELECT
        DayIndex = ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY CalendarDate),
        CalendarDate,
        CalenderDayOfMonth = DATEPART(DAY, CalendarDate),
        CalenderMonthOfYear = DATEPART(MONTH, CalendarDate),
        CalendarYear = DATEPART(YEAR, CalendarDate),
        CalenderWeekOfYear = DATEPART(WEEK, CalendarDate),
        CalenderQuarterOfYear = DATEPART(QUARTER, CalendarDate),
        CalenderDayOfYear =  DATEPART(DAYOFYEAR, CalendarDate),
        CalenderDayOfWeek =  DATEPART(WEEKDAY, CalendarDate),
        CalenderWeekday =  DATENAME(WEEKDAY, CalendarDate)   
    FROM
        OrderedDays                 
)
SELECT * FROM Calendar
OPTION (MAXRECURSION 0) 

推荐阅读