我正在尝试获取正确的SQL代码以获取上周五的日期。几天前,我以为我的代码是正确的。但我只是注意到它是上周的周五日期,而不是上周五。我写这个问题的日期是2012年8月11日星期六上午12:23在SQL Server中,此代码返回2012年8月3日星期五。但是,我想让它返回到2012年8月10日星期五。我如何修复这段代码?由于我们在这里开始详细说明,如果当前日期是星期五,那么我想返回今天的日期。所以,如果是昨天(2012年8月10日),我昨天运行了这段代码,那么我希望这段代码返回2012年8月10日,而不是2012年8月3日。
SELECT DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))发布于 2012-08-11 13:53:41
试试这个:
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 Example2:
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 发布于 2012-09-28 19:33:44
模算术是最直接的方法,运算的顺序决定了如何处理星期五:
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发布于 2012-08-11 14:18:51
使用以下命令:
SELECT DATEADD(day, (DATEDIFF (day, '19800104', CURRENT_TIMESTAMP) / 7) * 7, '19800104') as Last_Fridayhttps://stackoverflow.com/questions/11912181
复制相似问题