我正试图在SQL Server 2008中获得最新的星期五.
我有这个.它获得了本周的开始(星期一),然后减去3天到星期五.
declare @recentFriday datetime = DATEADD(ww, DATEDIFF(dd,0,GETDATE()), 0)-3
Run Code Online (Sandbox Code Playgroud)
如果在一周内运行,它将在上周五的日期正确.但是当在周五(或周六)运行时,它仍然会在上周的日期而不是当前周的周五.我即将使用if/else条件,但我确信这是一种更简单的方法.
mel*_*okb 14
这适用于任何输入和任何设置DATEFIRST:
dateadd(d, -((datepart(weekday, getdate()) + 1 + @@DATEFIRST) % 7), getdate())
Run Code Online (Sandbox Code Playgroud)
它的工作原理是调整工作日值,使0 =星期五,模拟星期五作为星期的开始.然后减去工作日值(如果非零)以获得最近的星期五.
编辑:更新以适用于任何设置DATEFIRST.
DECLARE @date DATETIME = '20110512' -- Thursday
SELECT DATEADD(DAY,-(DATEDIFF(DAY,'19000105',@date)%7),@date) --20110506
SET @date = '20110513' -- Friday
SELECT DATEADD(DAY,-(DATEDIFF(DAY,'19000105',@date)%7),@date) --20110513
SET @date = '20110514' -- Saturday
SELECT DATEADD(DAY,-(DATEDIFF(DAY,'19000105',@date)%7),@date) --20110513
Run Code Online (Sandbox Code Playgroud)