tsql中的datediff返回什么

时间:2017-05-22 15:29:45

标签: sql sql-server

我有以下sql,它返回上一个星期一的日期。

SELECT  DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0) //2017-05-15 00:00:00.000

然而,在试图了解这是如何解决的时候,我很困惑  关于以下返回的6124代表什么

 SELECT  DATEDIFF(wk, 6, GETDATE())

仅在上周才会出现这么高的数字?

另外,如何将偏移量设为固定数字,并且仍能计算出上一个星期一的日期

2 个答案:

答案 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)

6startdate的{​​{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添加到日期时,它会为您提供上周的开始。