vik*_*gla 0 sql t-sql sql-server query-optimization
在 SQL Server 数据库中,我有一个包含一DateTime列的表,我想获取特定日期的行。
我发现了很多选择,例如:
WHERE myColumn BETWEEN '2020-10-10T00:00:00.00' AND '2020-10-10T23:59:59.999'WHERE CAST(myColumn AS date) = '2020-10-10'WHERE date LIKE '%2020-10-10%'...
其中哪一个最快?
正如 @marc_s 所提到的:这些选项都不正确。
WHERE myColumn BETWEEN '2020-10-10T00:00:00.00' AND '2020-10-10T23:59:59.999'datetime值,您将得到一个舍入误差,其中包括第二天的开始时间,并且datetime2您将错过 1 毫秒。WHERE CAST(myColumn AS date) = '2020-10-10'WHERE date LIKE '%2020-10-10%'你真正需要的是:
WHERE myColumn >= '2020-10-10' AND myColumn < '2020-10-11'
Run Code Online (Sandbox Code Playgroud)
这涵盖了一个日期范围并允许在该范围内进行索引查找。另请参见BETWEEN 和魔鬼有什么共同点?
显然,您仍然需要日期列上的索引,但由于我们看不到查询的其余部分或表定义,因此我们无法提供帮助。