一尘不染

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

sql

我正在尝试获取正确的SQL代码以获取上周五的日期。几天前,我认为自己的代码正确无误。但只是注意到,它是在上周的星期五日期,而不是最后一个星期五。我写此问题的日期是2012年8月11日,星期六,上午12:23。在SQLServer中,此代码将返回2012年8月3日,星期五。不过,我希望这能返回2012年8月10日,星期五。我该如何解决此代码?由于我们在这里进行了详细说明,因此,如果当前日期是星期五,那么我想返回今天的日期。因此,如果是昨天(2012年8月10日),并且我昨天运行了这段代码,那么我希望这段代码返回2012年8月10日,而不是2012年3月3日。

SELECT DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))

阅读 196

收藏
2021-03-10

共1个答案

一尘不染

试试这个:

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

结果

2012-08-03

范例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

结果

  2012-08-10
2021-03-10