获取上周五的日期,除非今天是星期五使用T-SQL

Mac*_*ver 16 sql t-sql sql-server dayofweek

我正在尝试获取正确的SQL代码以获取上周五的日期.几天前,我以为我的代码是正确的.但只是注意到它正在上周五的星期五,而不是上周五.我写这个问题的那天是星期六,8/11/2012 @ 12:23 am.在SQL Server中,此代码将于2012年8月3日星期五返回.但是,我希望这会在星期五,即8/10/2012返回.我该如何修复此代码?由于我们在这里详细说明,如果当天是星期五,那么我想回到今天的日期.所以,如果它是昨天(8/10/2012)并且我昨天运行了这段代码,那么我希望这段代码能够返回8/10/2012,而不是8/3/2012.

SELECT DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))
Run Code Online (Sandbox Code Playgroud)

Joe*_*eph 13

试试这个:

declare @date datetime;
set @date='2012-08-09'
SELECT case when datepart(weekday, @date) >5 then
 DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end
Run Code Online (Sandbox Code Playgroud)

结果:

2012-08-03 
Run Code Online (Sandbox Code Playgroud)

例2:

declare @date datetime;
set @date='2012-08-10'
SELECT case when datepart(weekday, @date) >5 then
 DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end
Run Code Online (Sandbox Code Playgroud)

结果:

  2012-08-10 
Run Code Online (Sandbox Code Playgroud)

  • 如果一切顺利,我会投票给你并接受一周后。到现在为止还挺好。我将在一周中的每一天进行测试。顶一个符合我的要求。谢谢。 (2认同)

小智 9

模块化算法是最直接的方法,操作顺序决定星期五的处理方式:

DECLARE @test_date DATETIME = '2012-09-28'

SELECT DATEADD(d,-1-(DATEPART(dw,@test_date) % 7),@test_date) AS Last_Friday
      ,DATEADD(d,-(DATEPART(dw,@test_date+1) % 7),@test_date) AS This_Friday
Run Code Online (Sandbox Code Playgroud)


Hab*_*are 5

用这个 :

SELECT DATEADD(day, (DATEDIFF (day, '19800104', CURRENT_TIMESTAMP) / 7) * 7, '19800104') as Last_Friday
Run Code Online (Sandbox Code Playgroud)