SQL Server获取上周日至上周六日期的技术问题求助
获取上周日至上周六的日期范围解决方案
我懂你要的是上周日到上周六的完整日期区间,而不是当前周的。你的现有代码逻辑是对的,只是在计算周数偏移的时候差了一步——只需要把周数减1,就能从当前周切换到上一周。
修改后的代码
Declare @now DateTime, @fmWeek DateTime, @toWeek DateTime Set @now = GetDate() -- 调整周数偏移:在DateDiff结果后减1,得到上周日的00:00:00.000 Set @fmWeek = Convert(DateTime, DateAdd(wk, DateDiff(wk, 0, @now) - 1, -1)) -- 同样调整周数偏移,得到上周六的23:59:59.997 Set @toWeek = DATEADD(ms,-3,Convert(DateTime, DateAdd(wk, DateDiff(wk, 0, @now) - 1, 6))) select @fmWeek, @toWeek
逻辑说明
- 原来的
DateDiff(wk, 0, @now)计算的是从SQL Server基准日期(1900-01-01)到当前日期的总周数,在此基础上减1,就定位到了上一周的时间区间。 DateAdd(wk, 计算出的上周周数, -1)会返回上周日的0点整,而DateAdd(wk, 上周周数, 6)返回的是上周六的0点,再减去3毫秒就得到了周六的最后一刻(23:59:59.997),确保区间包含当天所有时间。
比如如果当前日期是2018-04-22,修改后的代码会返回2018-04-08 00:00:00.000到2018-04-14 23:59:59.997,完全符合你要的上周日到上周六的范围。
内容的提问来源于stack exchange,提问作者syed mohsin
相关产品推荐
相关产品推荐

