我有2个日期01/04/2017
和30/04/2017
。我想要这两个日期之间的所有日期,间隔为7天。
Expected Output :
01/04/2017
08/04/2017
15/04/2017
22/04/2017
29/04/2017
请帮助!!
答案 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
结果
答案 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