如何在范围内添加日期

时间:2019-08-26 17:10:19

标签: sql-server

我需要将一系列日期以及相应的列数据插入表中。我桌子的最早日期是2017-3-16,但是我需要添加追溯到2016-1-1的日期。请参阅下面的屏幕快照以供参考:

enter image description here

我确定我可以使用诸如datepart,datename等功能来弄清楚如何分配星期几,日期类型等。我不确定的是如何插入日期范围,介于2016-1-1和2017-3-15之间。

1 个答案:

答案 0 :(得分:1)

我经常使用此代码段,以便随时使用。只需设置高和低日期变量,然后在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)