2016-03-21 9 views

答えて

0
; with dates as 
(
    select date = @fromdate 
    union all 
    select date = dateadd(day, 1, date) 
    from dates 
    where date < @tilldate 
) 
select * 
from dates 
where datename(weekday, date) = 'Sunday' 
2

まず、DATENAMEを使用して、日曜日を取得し、その後Tally Tableを使用して@fromDateから@tillDateに日付のリストを生成し、:

DECLARE @fromDate DATE = '20160301', 
     @tillDate DATE = '20160331' 

;WITH E1(N) AS(
    SELECT * FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) t(N) 
), 
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), 
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), 
CteTally(N) AS(
    SELECT TOP (DATEDIFF(DAY, @fromDate, @tillDate) + 1) 
     ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) 
    FROM E4 
) 
SELECT 
    dt = DATEADD(DAY, N - 1, @fromDate) 
FROM CteTally 
WHERE (DATEPART(dw, DATEADD(DAY, N - 1, @fromDate)) + @@DATEFIRST) % 7 = 1 

SQL Fiddle


(DATEPART(dw, DATEADD(DAY, N - 1, @fromDate)) + @@DATEFIRST) % 7 = 1 

言語に関係なく生成日が日曜日であるかどうかを確認し、@@DATEFIRSTの設定を指定します。

+0

+1と@@ datefirstの独立メソッド。太陽は%7 = 1、月は%7 = 2、...土は%7 = 0 – Squirrel

関連する問題