sql-server - 如何在一个范围内添加日期
问题描述
我需要在表格中插入一系列日期以及相应的列数据。我的表的最早日期停止在 2017-3-16,但我需要添加可追溯到 2016-1-1 的日期。请参阅下面的屏幕截图以供参考:
我确定我可以使用 datepart、datename 等函数确定如何确定星期几、日期类型等。我不确定的是如何在 2016 年之间插入一系列日期-1-1 和 2017-3-15。
解决方案
我把这个片段放在手边,因为它经常需要。只需设置最高和最低日期变量,然后在 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)
推荐阅读
- c# - 未从列表元素调用 GetHashCode
- java - 如何知道使用 @KafkaListener 注释时何时调用 consumer.poll()?
- java - 无法获取本地和 UTC Instant
- elixir - List 包含另一个相同顺序的列表
- reactjs - 组件在初始化后正在更改不受控制的 Slider 的默认值状态。带有 Redux 状态的 Material UI 滑块
- jquery - 仅在屏幕尺寸 > 720 时触发滚动功能
- vba - 通过 VBA 拆分 Access 数据库需要很长时间
- python - Python Selenium:如何等到 href 属性包含特定字符串?
- java-8 - 如何解决具有小状态大小问题的慢检查点?
- sas - 使用 if _n_ =1 then do 的区别;并且不在 SAS 中将其与 PRXPARSE() 一起使用