如何计算两个日期的确切月份(以天为单位)差异

use*_*981 2 sql-server-2008 sql-server

我正在尝试获取访问日期在五个月之前准确的所有行,但不知何故 DateDiff 函数包括 2013 年 9 月 26 日的记录,这是不正确的,因为五个月的平均天数为 150 到 153 天。我认为它应该算到 2013 年 9 月 3 日。

我正在使用 DATEDIFF(MONTH, VisitDate , GETDATE()) > =5

我应该使用 DATEDIFF( DAY , VisitDate , GETDATE()) >= 153 代替

Aar*_*and 5

你的问题的问题(对不起,无法抗拒)是你没有正确定义你对一个月的期望。12月27日到2月28日有多少个月?12月28日和2月28日怎么样?12 月 29 日?12 月 15 日到 1 月 13 日呢?12 月 15 日至 1 月 14 日?

正如其他人所提到的,DATEDIFF只是测量已经通过的边界数量。以下都返回 1:

SELECT 
  DATEDIFF(YEAR,'20120101','20131231'), 
  DATEDIFF(YEAR,'20121231','20130101');
Run Code Online (Sandbox Code Playgroud)

尽管你我都知道第一个例子只过去了一天,而第二个例子已经过去了将近两年

如果您想要 9 月 4 日之前的所有内容(因为今天是 2 月 3 日),那么:

DECLARE @d DATE = SYSDATETIME;

SELECT <cols> FROM dbo.tablename
  WHERE VisitDate < DATEADD(DAY, 1, DATEADD(MONTH, -5, @d));

-- the above evaluates to < '2013-09-04'
Run Code Online (Sandbox Code Playgroud)