获取最新的星期五的SQL日期

Jam*_*mes 15 sql sql-server

我正试图在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.

  • 它的中间值(+1)这是一个更通用的版本,你可以使用一些测试变量,它们可以说明:`DECLARE @DayToFind varchar(10),@ DWValue int,@ DateToTestWith datetime; SELECT @DayToFind ='fri',@ DateToTestWith = DATEADD(dd,0,GetDate()); SELECT @DwValue = CHARINDEX(SUBSTRING(@ DayToFind,1,3),'FRITHUWEDTUEMONSUNSAT')/ 3 + 1; SELECT dateadd(d, - ((datepart(weekday,@ DateToTestWith)+ @DwValue + @@ DATEFIRST)%7),@ DateToTestWith);`尝试更改@DayToFind或@DateToTestWith. (2认同)

Per*_* P. 6

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)
  1. 计算已知星期五(1900年1月5日)和给定日期之间的天数
  2. 将差值除以1而得到的剩余部分将是自上周五以来经过的天数
  3. 从给定日期减去2.中的余数