我有一种情况,用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
答案 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)