如何为日期范围内的每一天插入一行?

问题描述 投票:0回答:1

我有一个表,每一行都有一个

ID
Date
Value
列。我希望这样,每次有人访问我的网站上的页面时,都会运行一个存储过程,该存储过程将在某个范围内的每一天插入一行(如果该天尚不存在)。

日期范围将从 01/01/2012 到当天(访问页面的当天)之前的星期六。

ID
将自动生成,并且
Value
字段将保持 NULL/空白。

例如,如果我今天访问该页面,我希望在表中记录 01/01/2012 到 03/03/2012 之间的每一天。

sql sql-server-2005
1个回答
3
投票

这将获取所有尚不存在的日期,并排除上周六之后的行。

;WITH d AS 
(
  SELECT TOP (366) d = DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY object_id), '20111231')
  FROM sys.all_columns
)
INSERT dbo.[a table]([Date])
  SELECT d FROM d 
  WHERE d NOT IN (SELECT [Date] FROM dbo.[a table])
  AND d <= DATEADD(DAY, 0-DATEPART(WEEKDAY, GETDATE()), GETDATE());

请注意,我假设您会在日历年结束后“重置”此设置。

© www.soinside.com 2019 - 2024. All rights reserved.