有兩種方法可以解決上週五,一個使用DATEFIRST
,另一個使用巧合,第0天是星期一。
設置DATEFIRST
至6日(星期六),然後制定出每週日以前結束:
SET DATEFIRST 6
SELECT CAST(DATEADD(DAY, -DATEPART(WEEKDAY, GETDATE()), GETDATE()) AS DATE) 'Last Friday';
或者找最近一週的開始(星期一)和計數回三天
SELECT CAST(DATEADD(DAY, -3 , DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0)) AS DATE) 'Last Friday'
我更喜歡前者,但既然你明確地尋找星期五,而不是本週特定的地區特定結束日期,那麼對於後者你會好的。
其餘的是插入標準的第一/最後DATEADD/DATEDIFF
模式。這些應該給你你要找的東西:
DECLARE @LastFriday DATE = DATEADD(DAY, -3 , DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0));
SELECT
LastFriday = @LastFriday,
PriorWeekStart = DATEADD(DAY, -6, @LastFriday),
MonthStart = CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, @LastFriday), 0) AS DATE),
QuarterStart = CAST(DATEADD(QUARTER, DATEDIFF(QUARTER, 0, @LastFriday), 0) AS DATE)
LastFriday PriorWeekStart MonthStart QuarterStart
---------- -------------- ---------- ------------
2016-07-29 2016-07-23 2016-07-01 2016-07-01