这将返回一周的第一天,给定周数和年份,假设一周的第一天是星期日。
标准排除适用,例如不要尝试 1499 年。
declare @tbl table ([Week] int, [Year] int)
insert @tbl select 38,2012
union all select 1,2012
union all select 0,2012
union all select 1,2013
select DATEADD(
Week,
[Week]-1,
DATEADD(
Day,
(8-@@datefirst)-DATEPART(dw, CAST([Year]*10000+101 AS VARCHAR(8))),
CAST([Year]*10000+101 AS VARCHAR(8))))
from @TBL
结果
2012-09-16 00:00:00.000
2012-01-01 00:00:00.000
2011-12-25 00:00:00.000
2012-12-30 00:00:00.000
请注意,周数从 1 开始,如果该周不是从星期日开始,那么该周的第一天可能会在较早的一年结束(第 4 行)。因为周是相对的,所以您可以使用第 0 周、-1 等,它仍然会给您一个结果(第 3 行),无论对错。
您可能还注意到我使用了另一种方法来创建一年中的日期,作为一种替代方法。
无论您的设置如何,查询
的
(8-@@datefirst)
一部分都使其健壮。
DATEFIRST