我需要将一系列日期以及相应的列数据插入表中。我桌子的最早日期是2017-3-16,但是我需要添加追溯到2016-1-1的日期。请参阅下面的屏幕快照以供参考:
我确定我可以使用诸如datepart,datename等功能来弄清楚如何分配星期几,日期类型等。我不确定的是如何插入日期范围,介于2016-1-1和2017-3-15之间。
答案 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)