在学习如何从前一周获取一周中某一天的日期(例如从前一周的星期一的日期)时,我发现以下两个表达式通常出现,您可以更改最后一个数字(例如 0=星期一)取决于你想要哪一天:
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)
SELECT DATEADD(wk, DATEDIFF(wk, 7, GETDATE()), 0)
当我今天运行它时,两者似乎都返回了正确的日期2017-05-29
(2017-06-17)。
我的问题是 - 这是如何工作的?似乎是在数周后6
还是7
数周后1900-01-01
?为什么它同时适用于 a6
和7
?
此外,是否存在需要注意可能无法提供预期结果的边缘情况?
这利用
1900-01-01
了星期一的事实。因此,添加n
周数也将是星期一。以下是该
datetime
表达式中的整数表示的值:加上自
1900-01-08
(第一个星期一之后的一周)以来的周数,1900-01-01
返回比当前周少一周,即上周的星期一。这三个是等价的:
rextester 演示:http ://rextester.com/BQX59903