/* Determine the first week's last day of the week, weekday = 7 (Saturday) */
declare @current_year char(4)
declare @week1_lastday datetime
select @current_year = convert(varchar(4),datepart(yy,getdate()))
select @week1_lastday = dateadd(day,v.number,convert(datetime,'1/1/' + @current_year ))
from master..spt_values v
where v.type = 'P'
and v.number between 0 and 6
and datepart(dw,dateadd(day,v.number,convert(datetime,'1/1/' + @current_year ))) = 7
/* Now, given any week number, add weeks to the date above to get last day, then subtract 6 days */
declare @given_weeknum tinyint
select @given_weeknum = 14
select given_weeknum = @given_weeknum, first_weekday = dateadd(dd,-6,dateadd(wk,@given_weeknum - 1,@week1_lastday))
given_weeknum first_weekday
------------- -------------------
14 Mar 27 2016 12:00AM
/* Generally, just list every first day of week for the year */
select week_num = v.number,
first_weekday = dateadd(dd,-6,dateadd(wk,v.number - 1,@week1_lastday))
from master..spt_values v
where v.type = 'P'
and v.number between 1 and 53
week_num | first_weekday |
----------- -------------------
1 Dec 27 2015 12:00AM | |
2 Jan 3 2016 12:00AM | |
3 Jan 10 2016 12:00AM | |
4 Jan 17 2016 12:00AM | |
5 Jan 24 2016 12:00AM | |
6 Jan 31 2016 12:00AM | |
7 Feb 7 2016 12:00AM | |
8 Feb 14 2016 12:00AM | |
9 Feb 21 2016 12:00AM | |
10 Feb 28 2016 12:00AM | |
11 Mar 6 2016 12:00AM | |
12 Mar 13 2016 12:00AM | |
13 Mar 20 2016 12:00AM | |
14 Mar 27 2016 12:00AM | |
15 Apr 3 2016 12:00AM | |
16 Apr 10 2016 12:00AM | |
17 Apr 17 2016 12:00AM | |
18 Apr 24 2016 12:00AM | |
19 May 1 2016 12:00AM | |
20 May 8 2016 12:00AM | |
21 May 15 2016 12:00AM | |
22 May 22 2016 12:00AM | |
23 May 29 2016 12:00AM | |
24 Jun 5 2016 12:00AM | |
25 Jun 12 2016 12:00AM | |
26 Jun 19 2016 12:00AM | |
27 Jun 26 2016 12:00AM | |
28 Jul 3 2016 12:00AM | |
29 Jul 10 2016 12:00AM | |
30 Jul 17 2016 12:00AM | |
31 Jul 24 2016 12:00AM | |
32 Jul 31 2016 12:00AM | |
33 Aug 7 2016 12:00AM | |
34 Aug 14 2016 12:00AM | |
35 Aug 21 2016 12:00AM | |
36 Aug 28 2016 12:00AM | |
37 Sep 4 2016 12:00AM | |
38 Sep 11 2016 12:00AM | |
39 Sep 18 2016 12:00AM | |
40 Sep 25 2016 12:00AM | |
41 Oct 2 2016 12:00AM | |
42 Oct 9 2016 12:00AM | |
43 Oct 16 2016 12:00AM | |
44 Oct 23 2016 12:00AM | |
45 Oct 30 2016 12:00AM | |
46 Nov 6 2016 12:00AM | |
47 Nov 13 2016 12:00AM | |
48 Nov 20 2016 12:00AM | |
49 Nov 27 2016 12:00AM | |
50 Dec 4 2016 12:00AM | |
51 Dec 11 2016 12:00AM | |
52 Dec 18 2016 12:00AM | |
53 Dec 25 2016 12:00AM |