您可以使用CTE創建數字表。然後,您可以使用數字表,讓您的日期,就像這樣:
Declare @Startdate Datetime = '2016-07-01'
Declare @EndDate Datetime = '2016-08-29'
;with
N0 as (SELECT 1 as n UNION ALL SELECT 1)
,N1 as (SELECT 1 as n FROM N0 t1, N0 t2)
,N2 as (SELECT 1 as n FROM N1 t1, N1 t2)
,N3 as (SELECT 1 as n FROM N2 t1, N2 t2)
,N4 as (SELECT 1 as n FROM N3 t1, N3 t2)
,nums as (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as num FROM N4)
SELECT DATEADD(day,num-1,@startdate) as thedate
FROM nums
WHERE num <= DATEDIFF(day,@startdate,@enddate) + 1
and datename(WEEKDAY, DATEADD(day,num-1,@startdate)) = 'Sunday'
每個表(N0
到nums
)有效地提升了在前面的「表」的行數,所以你最終65,536行號在nums
(根據需要添加或刪除表NX
可以做更少或更多)。然後,使用數字表將日期添加到您的開始日期(SELECT DATEADD(day,num-1,@startdate) as thedate
),其中返回的日期在您的日期範圍內,並且weekday
是星期日。
而且,因爲1 nums
開頭的數字,我們用nums-1
在我們的選擇,從而避免跳過本系列上的第一次約會,有效地給我們DATEADD(day, 0, @startdate)
我們的第一排。