我想我真的很接近这个,但我只是偏离了目标!
我正在尝试创建一个日期(报告日期),允许我选择每周周六至周五。以上周为例,下面的代码为我提供了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])
快乐编码