与datetime2(7)相比,GETDATE() - n排除匹配值

时间:2018-05-17 06:54:57

标签: sql-server sql-server-2012

我有一种情况,用GETDATE()查询datetime2(7)字段 - n没有返回预期的输出。

使用> = GEDATE()查询 - 20返回除4/27之外的所有日期(如果今天运行5/17) 使用> = 4/27/2018查询将返回所有日期,包括4/27。

是否与时间段有关?即使时间部分都是0'

DECLARE @MinDate DATE = '04-01-2018',
        @MaxDate DATE = '05-17-2018';

SELECT  TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
        DateCol = CAST(DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) AS DATETIME2(7))
INTO #temp
FROM    sys.all_objects a
        CROSS JOIN sys.all_objects b;

--SELECT * FROM #temp

SELECT COUNT(*) FROM #temp WHERE DateCol >= GETDATE()-20
SELECT COUNT(*) FROM #temp WHERE DateCol >= '2018-04-27'                --excludes the date 4/27

/*
SELECT * FROM #temp WHERE DateCol >= GETDATE()-20   --Excludes 4/27
SELECT * FROM #temp WHERE DateCol >= '2018-04-27'   --Expected output includes 4/27
*/
DROP TABLE #temp

1 个答案:

答案 0 :(得分:2)

这是因为“2018-04-27 00:00:00.0000000”不大于GETDATE()-20

GETDATE()-20会提供类似'2018-04-27 10:25:37.680'

的内容

对于一种情况,您只使用日期,而另一种情况则是日期和时间。

您应该像以下一样更改查询,以便在比较前更改日期时间,以获得所需的输出。

SELECT COUNT(*) FROM #temp WHERE DateCol >= cast(GETDATE() -20 as date)