SQL Server 2012-周日期周六至周五



我想我真的很接近这个,但我只是偏离了目标!

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

    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

这应该会为您提供您想要的东西:

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

它将为您提供任何给定日期的下一个星期五。请记住,weekday日期部分是区域设置敏感的,因此可能需要根据区域设置调整偏移量。或者,您可能需要做一些更全面的操作,使其对区域设置不敏感。SELECT @@DATEFIRST将在您所在的地区为您提供一周中的第一天。7点是星期天。如有必要,你可以将其纳入其中。

试试这个,

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

  • 量程起始:DATEADD(DAY, 6 - DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

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

快乐编码

最新更新