我正在尝试获取正确的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))
试试这个:
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