如何基于SQL Server中的周数获取星期一,星期日?

Ang*_*ker 5 sql sql-server-2005 date

我有一个星期数(例如23),我想获取该星期的星期一和星期日的日期。
我假设星期一为一周的第一天(例如,我SET DATEFIRST 1在脚本中输入)。

gbn*_*gbn 3

DECLARE @startweek1 datetime
SET DATEFIRST 1

--first monday of year
SELECT @startweek1 = DATEADD(day, 8-DATEPART(weekday, '2011-01-01'), '2011-01-01')

--day based
SELECT
    DATEADD(day, 22 * 7, @startweek1) AS MondayWeek23,
    DATEADD(day, 23 * 7 -1 , @startweek1) AS SundayWeek23

--week based
SELECT
    DATEADD(week, 22, @startweek1) AS MondayWeek23,
    DATEADD(day, -1, DATEADD(week, 23 , @startweek1)) AS SundayWeek23
Run Code Online (Sandbox Code Playgroud)

编辑:

如果第一周没有像安多马尔所说的那样从第一天开始,这个解决方案就有效

编辑2:

根据Wikipedia:2008 年 12 月 29 日是 ISO 中 2009 年第 1 周的第 1 天。

正如安多马尔所说,周数有所不同

Cyber​​kiwi 提到这段代码在 2007 年是错误的:它错误的次数远不止于此。这同样适用于他的代码,它与 2007 年匹配,但对于其余代码同样是错误的。