DATEADD从现在起30天内不包括一天

a12*_*234 1 sql-server date sql-server-2012

我有一个SQL查询...

当我从今天的日期开始运行此查询时,我将获得从2016年7月22日返回的记录.

SELECT test_id, lat, long
FROM  testDB.src.test_20
WHERE test_date >= DATEADD(day,-32, GETDATE()) and lat is not null and long is not null 
Run Code Online (Sandbox Code Playgroud)

当我将DATEADD功能更改为-31时,我将从2016年7月23日获得记录.

SELECT test_id, lat, long
FROM  testDB.src.test_20
WHERE test_date >= DATEADD(day,-31, GETDATE()) and lat is not null and long is not null
Run Code Online (Sandbox Code Playgroud)

我可能不清楚DATEADD函数是如何工作的.我认为使用-31时会发生的是从今天到第31天的记录,包括2016年7月22日的记录将被退回(从31天前的今天起是2016年7月22日).

为什么使用-31时未返回2016年7月22日的记录?

SQL Server Management Studio 2012

Ric*_*ard 5

仅考虑该表达式:

select DATEADD(day,-31, GETDATE())
2016-07-22 16:18:42.697
Run Code Online (Sandbox Code Playgroud)

然后,您查找test_date大于该日期时间的行.

也许你需要消除时间部分,只考虑几天:

select DATEADD(day,-31, cast(GETDATE() as date))
2016-07-22
Run Code Online (Sandbox Code Playgroud)

和日期时间一样2016-07-22 10:15:00.420.