如何在一周中的两个日期添加日期?

时间:2016-09-08 09:33:42

标签: sql-server-2008 date

我有一张表,其中行的日期为周的星期几。一些连续的行可能没有连续的周期,因此它们之间存在间隙。此图像将清除这种情况: enter image description here

从图像中可以清楚地看出,2016-08-08和2016-09-05周末之间存在差距,因为行周期为'2016-08-15','2016-08-22','2016-08 -29'在'2016-09-05'之前不存在。

那么,我如何用所有这些日期的行填充这个空白,并为剩下的两列填充null?

2 个答案:

答案 0 :(得分:1)

使用计数表

您可以尝试使用此代码,该代码将生成星期一列表

DECLARE @start INT=0;
DECLARE @end INT=20;
DECLARE @step INT=7;

WITH x AS(SELECT 1 AS N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS tbl(N))--10^1
,N3 AS (SELECT 1 AS N FROM x CROSS JOIN x AS N2 CROSS JOIN x N3) --10^3
,Tally AS(SELECT TOP(@end-@start +1) (ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) + @start -1) * @step AS Nr FROM N3 
          CROSS JOIN N3 N6 CROSS JOIN N3 AS N9)
SELECT DATEADD(DAY,Nr,{d'2016-08-01'}) AS Monday 
FROM Tally

您可以使用@start@end指定生成的行数,@step在您的情况下应为7。这将在给定日期(在您的情况下应该是星期一)添加0,7,14,21 ......。

现在使用LEFT JOIN将其与您的表格数据相结合。这应该会产生所有星期一的无间隙列表以及值 - 如果有的话......

答案 1 :(得分:0)

试试这个:

SELECT DATEADD(week,1,[select query]) -- In select query write the query 
                                      -- to get the date to which you need to add 1 week

enter image description here

在上面的查询中,它将采用当前日期,即2016-09-08 15:19:06.950并为其添加1周,并给出结果日期,即2016-09-15 15:19:40.657