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)
小智 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)
用这个 :
SELECT DATEADD(day, (DATEDIFF (day, '19800104', CURRENT_TIMESTAMP) / 7) * 7, '19800104') as Last_Friday
Run Code Online (Sandbox Code Playgroud)