10

在给定任何时间戳的情况下,我想获得本周的最后一天(星期日)。我尝试了以下脚本,但它返回星期六作为最后一天,而不是我预期的星期日。

Select DATEADD(DAY , 7-DATEPART(WEEKDAY,GETDATE()),GETDATE()) AS 'Last Day Of Week' 

欢迎任何答案!

4

4 回答 4

17

如果您将标准 DATEFIRST 从星期日 (7) 更改为星期一 (1),它将起作用:

SET DATEFIRST 1

Select DATEADD(DAY , 7-DATEPART(WEEKDAY,GETDATE()),GETDATE()) AS 'Last Day Of Week' 
于 2012-07-20T13:59:38.933 回答
1
DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 6)

我知道这篇文章很旧,但是当通过谷歌搜索时,这篇文章在顶部。

总是很高兴更新。

于 2019-07-30T17:50:06.870 回答
0

为您的命令添加前缀set datefirst 1

于 2012-07-20T14:00:19.323 回答
0

以下不适用于某些DATEFIRST(语言)的星期日:

    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 6)

此外,设置DATEFIRST并不总是一种选择(功能不能使用SET DATEFIRST

这是一个通用的:

  • 从星期一开始,它会持续数周
  • 总是返回本周的星期日
  • 无论DATEFIRST设置如何都可以工作
  • 不变DATEFIRST,因此可以在函数中使用
    DECLARE @today DATE = getdate(); (or any other date);

    SELECT dateadd(day, ((15-@@datefirst) - datepart(dw, @today)) % 7, @today);
于 2019-10-24T16:20:13.300 回答