首页 > 解决方案 > 日期比较 BETWEEN vs < >

问题描述

我对 BETWEEN 关键字与使用 < 和 > 运算符比较上限和下限日期的性能有疑问。

例子:

WHERE EncDate BETWEEN '2010-04-30' AND GETDATE() - 1

WHERE EncDate > '2010-04-29' AND EncDate < GETDATE()

上面的两个查询都应该输出完全相同的行数,但是,我是否正确假设 BETWEEN 关键字在幕后执行包容性(>= 或 <=)比较,其性能不如从第二个查询?

标签: sqlsql-serverperformance

解决方案


这两个不一样!

WHERE EncDate BETWEEN '2010-04-30' AND GETDATE() - 1

WHERE EncDate > '2010-04-29' AND EncDate < GETDATE()

如果EncDate是没有时间成分的日期,它们将产生相同的结果集。否则,它们是不同的。

一般建议是使用:

WHERE EncDate >= '2010-04-30' AND 
      EncDate < CONVERT(DATE, GETDATE())

这对于是否存在时间分量具有相同的含义。

我很确定从优化的角度来看,这些是完全相同的。在使用数据库时,比较时间这样的小事情通常不会对性能产生影响——昂贵的操作正在移动数据。

Aaron Bertrand 对使用日期/时间数据类型进行了很好的讨论BETWEEN,名为What Do Between And The Devil Have In Common


推荐阅读