而不是使用
floor
要“截断”时间部分,请仅使用日期
date
类型:
DECLARE @StartDate date = '20180720', @EndDate date='20180720'
SELECT * FROM TEST
WHERE cast(DateReceived date) between @startdate and @enddate
或者,对于单一日期:
SELECT * FROM TEST
WHERE cast(DateReceived date) = @startdate
注意,我使用的是未分隔的日期文本。这就是
只有
明确的日期格式。另一种明确的格式是日期时间类型的完整ISO8601格式。两位数的年份只是
乞求
对于不正确的解释方式。
cast(DateReceived date)
将转换
datetime
价值观
DateReceived
进入之内
日期
价值观。通常,这是一个
坏的
将函数应用于字段的想法,因为它阻止查询优化器使用任何索引。SQL Server了解
cast( ... as date)
虽然和转换:
cast(DateReceived date) = @startdate
到相当于
DateReceived between @startdate at 00:00 but before the next day at 00:00
,允许它使用上的任何索引
数据登录