2016-08-03 200 views
0

我觉得我真的很接近这个,但我只是脱颖而出!SQL Server 2012-星期日期星期六到星期五

我想创建一个日期(通过报告),这将允许我选择每周星期六到星期五。 以上周为例,下面的代码给我2016年7月29日的日期范围为2016年7月24日至2016年7月30日,但我希望日期范围为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 
+0

您是否在寻找['SET DATEFIRST'](https://msdn.microsoft.com/en-in/library/ms181598.aspx)? – Arulkumar

回答

0

这应该给你你在找什么:

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

它会给你的下一个周五对于任何给定的日期。请记住weekday datepart是区域设置敏感的,所以偏移量可能需要根据区域设置进行调整。或者您可能需要做更全面的事情,以使其对地区不敏感。 SELECT @@DATEFIRST会在您的语言环境中为您提供一周中的第一天。 7日是星期天。如有必要,您可以将其纳入。

+0

嗨 - 感谢您的迅速回复 - 我无法完全重新创建使用这些解决方案后的结果(我的工作周日期范围例如25th 31st),所以我创建了一个迷你数据集来说明。我已经显示了两周开始和一周结束,但是创建哪一个并不重要(如果一个比另一个更容易) - 我希望这有助于:) – Baseline9

+0

Ahhh我解决了它!正如你所说,我需要重置我的区域设置,所以星期五是工作周的第一天,偏移量为-7,所以它在周末结束(每个星期五) - 谢谢大家的帮助:)它总是和我写的一样代码的复杂部分只是我需要克服的最后一道障碍! – Baseline9

0
  • 启动范围:DATEADD(DAY, 6 - DATEPART(WEEKDAY, [DateCreated]), [DateCreated])

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

快乐编码

相关问题