SQL Server 2012 - 星期六星期六到星期五

时间:2016-08-03 12:15:28

标签: sql sql-server datediff dateadd

我觉得我真的很接近这个,但我还是不合时宜!

我试图创建一个日期(报告),这样我就可以在周六到周五每周选择一个。 以上周为例,下面的代码为我提供了2016年7月24日至2016年7月24日的日期范围,但是我希望日期范围为23/07/2016至29 /这可能是07/2016吗?

    DATEADD(WEEK,DATEDIFF(WEEK,0,[DateCreated]),4) AS [WeekCreated]

非常感谢提前!

Id  Date    Week Commencing Week Ending
1   16/07/2016  16/07/2016  22/07/2016
2   17/07/2016  16/07/2016  22/07/2016
3   18/07/2016  16/07/2016  22/07/2016
4   19/07/2016  16/07/2016  22/07/2016
5   20/07/2016  16/07/2016  22/07/2016
6   21/07/2016  16/07/2016  22/07/2016
7   22/07/2016  16/07/2016  22/07/2016
8   23/07/2016  23/07/2016  29/07/2016
9   24/07/2016  23/07/2016  29/07/2016
10  25/07/2016  23/07/2016  29/07/2016
11  26/07/2016  23/07/2016  29/07/2016
12  27/07/2016  23/07/2016  29/07/2016
13  28/07/2016  23/07/2016  29/07/2016
14  29/07/2016  23/07/2016  29/07/2016

3 个答案:

答案 0 :(得分:0)

这应该可以满足您的需求:

DATEADD(DAY, 6 - DATEPART(weekday,[DateCreated]), [DateCreated])

在任何指定日期,它将为您提供以下星期五。请记住,weekday datepart是区域设置敏感的,因此可能需要根据区域设置调整偏移量。或者您可能需要做一些更全面的操作,以使其对区域设置不敏感。 SELECT @@DATEFIRST会在您的语言环境中为您提供一周中的第一天。 7是星期天。如有必要,您可以将其合并。

答案 1 :(得分:0)

试试这个,

SET DATEFIRST 6 -- set Saturday as Week start day
SELECT DATEPART(DW,  CAST('23-jul-2016' as DATETIME))

检查一下 - https://msdn.microsoft.com/en-in/library/ms181598.aspx

答案 2 :(得分:0)

  • 开始范围:DATEADD(DAY, 6 - DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

  • 范围结束:DATEADD(DAY, -1 * DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

快乐编码