以等间隔获取两个日期之间的日期

时间:2017-12-04 10:15:02

标签: sql-server

我有2个日期01/04/201730/04/2017。我想要这两个日期之间的所有日期,间隔为7天。

Expected Output : 
01/04/2017
08/04/2017
15/04/2017
22/04/2017
29/04/2017

请帮助!!

4 个答案:

答案 0 :(得分:0)

一种方法是使用Calendar table。然后使用模数从那里返回结果以获得第7行:

WITH Dates AS(
    SELECT *,
           ROW_NUMBER() OVER (ORDER BY [date]) AS RN
    FROM DateTable
    WHERE [Date] BETWEEN '20170401' AND '20170430')
SELECT *
FROM Dates
WHERE (RN - 1) % 7 = 0;

我已经使用过这个解决方案,因为从你的帖子中你暗示你可能提供任何日期范围,并且第1天可能不一定是星期一(或其他特定日期)。

答案 1 :(得分:0)

试试这个

DECLARE @STRT DATETIME='04/01/2017',@END DATETIME ='04/30/2017'
;WITH CTE
AS
(
    SELECT
        MyDate = CAST(@STRT AS DATETIME)

    UNION ALL

    SELECT
        MyDate = CAST(MyDate AS DATETIME)+7
        FROM CTE
            WHERE CAST(MyDate AS DATETIME)+7 < CAST(@END AS DATETIME)
)
SELECT
    *
    FROM CTE

结果

enter image description here

答案 2 :(得分:0)

DECLARE @StartDate  DATETIME,
    @EndDate        DATETIME

SELECT @StartDate = '2017-04-01',
    @EndDate = '2017-04-30'

SELECT DATEADD(DAY, number*7, @StartDate)
FROM master.dbo.spt_values
WHERE type='P'
    AND  @EndDate >= DATEADD(DAY, number*7, @StartDate)

答案 3 :(得分:0)

Declare @StartDate DATE=CONVERT(DATE,'01/04/2017',104),@EndDate DATE=CONVERT(DATE,'01/12/2017',104)
Declare @String NVARCHAR(MAX)=''

WHILE (@StartDate<=@EndDate AND DATEDIFF(wk,@StartDate,@EndDate)>=0)
BEGIN

SET @String=@String+CONVERT(NVARCHAR(100),@StartDate)+CHAR(10)+CHAR(13)

SET @StartDate=DATEADD(d,7,@StartDate)

END
PRINT  @String
GO