[MSSQL]年によってすべての日曜日の日付を得る


go
-- 
create function GetWeekDays(@year int)
returns @t table ( varchar(20))
as
begin
insert @t
select substring(convert(varchar,dateadd(day,x,col),120),1,10) from 
( select cast(cast(@year as varchar(4))+'-1-1' as datetime) as col )a cross join 
( select top 365 b8.i+b7.i + b6.i + b5.i + b4.i +b3.i +b2.i + b1.i + b0.i x 
from(select 0 i union all select 1) b0 
cross join(select 0 i union all select 2) b1 
cross join(select 0 i union all select 4) b2 
cross join(select 0 i union all select 8) b3 
cross join(select 0 i union all select 16) b4 
cross join(select 0 i union all select 32) b5 
cross join(select 0 i union all select 64) b6 
cross join(select 0 i union all select 128) b7 
cross join(select 0 i union all select 256) b8 
order by 1 )b where datepart(dw,dateadd(day,x,col))=1
return
end

-- 
select * from dbo.GetWeekDays(2011)
-- 
/*
 
--------------------
2011-01-02
2011-01-09
2011-01-16
2011-01-23
2011-01-30
2011-02-06
2011-02-13
2011-02-20
2011-02-27
2011-03-06
2011-03-13
2011-03-20
2011-03-27
2011-04-03
2011-04-10
2011-04-17
2011-04-24
2011-05-01
2011-05-08
2011-05-15
2011-05-22
2011-05-29
2011-06-05
2011-06-12
2011-06-19
2011-06-26
2011-07-03
2011-07-10
2011-07-17
2011-07-24
2011-07-31
2011-08-07
2011-08-14
2011-08-21
2011-08-28
2011-09-04
2011-09-11
2011-09-18
2011-09-25
2011-10-02
2011-10-09
2011-10-16
2011-10-23
2011-10-30
2011-11-06
2011-11-13
2011-11-20
2011-11-27
2011-12-04
2011-12-11
2011-12-18
2011-12-25
(52 row(s) affected)
*/