我有以下sql,它返回上一个星期一的日期。
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0) //2017-05-15 00:00:00.000
然而,在试图了解这是如何解决的时候,我很困惑 关于以下返回的6124代表什么
SELECT DATEDIFF(wk, 6, GETDATE())
仅在上周才会出现这么高的数字?
另外,如何将偏移量设为固定数字,并且仍能计算出上一个星期一的日期
答案 0 :(得分:0)
那是1900年1月的星期天......
SELECT
DATEDIFF(wk, '1/1/1900','5/20/2017'),
DATEDIFF(wk, '1/1/1900',GETDATE())
具体来说,他们使用的是DATETIMEOFFSET
而不是实际的DATETIME
,这是DATEDIFF
的可接受参数
所以回答你的问题,这是从1900年1月的第一个星期日到当天的周数(自你指定了wk)。
答案 1 :(得分:0)
6
中startdate
的{{1}}参数只是将输出减少一周的另一种方式,因此它返回自datediff
以来的周数而非1900-01-06
(差异之一)。
这两个语句将返回相同的结果:
1900-01-01
只是这一部分:select dateadd(week, datediff(week, 6, getdate()),0)
select dateadd(week, datediff(week, 0, getdate())-1,0)
会返回自datediff(week, 6, getdate()
以来的周数(6,124),当1900-01-06
添加到日期时,它会为您提供上周的开始。