找到当周的开始日(星期一)

del*_*ave 11 t-sql sql-server

查找将确定当前周的开始日(星期一)的SQL查询/查询.

示例:如果今天是 - >那么本周的开始是

Sat Oct 09, 2010 -> Start of the week is Monday Oct 04, 2010
Sun Oct 10, 2010 -> Start of the week is Monday Oct 04, 2010
Mon Oct 11, 2010 -> Start of the week is Monday Oct 11, 2010
Tue Oct 12, 2010 -> Start of the week is Monday Oct 11, 2010
Run Code Online (Sandbox Code Playgroud)

我在Google和StackOverflow上看到过很多"解决方案".看起来像:

SET @pInputDate = CONVERT(VARCHAR(10), @pInputDate, 111)
SELECT DATEADD(DD, 1 - DATEPART(DW, @pInputDate), @pInputDate)
Run Code Online (Sandbox Code Playgroud)

这是因为:2010年10月10日星期日 - > 2010年10月11日星期一开始(这是不正确的).

p.c*_*ell 19

尝试使用DATEFIRST明确设置星期几被视为"第一".

set DATEFIRST 1  --Monday
select DATEADD(DD, 1 - DATEPART(DW, @pInputDate), @pInputDate)
Run Code Online (Sandbox Code Playgroud)

这将返回InputDate落入的星期一.

  • 我找到了另一种解决方案,但这个解决方案更简单、更干净。谢谢。 (2认同)

小智 11

最简单的实现

SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0) MondayOfCurrentWeek


小智 8

建立在 p.campbell 的解决方案之上,如果您不想使用或不能使用“SET DATEFIRST 1”,您可以通过执行以下操作来解决这个问题:

SELECT DATEADD(DD, 2 - DATEPART(DW, DATEADD(DD, -1, @pInputDate)), DATEADD(DD, -1, @pInputDate))
Run Code Online (Sandbox Code Playgroud)