日期比较BETWEEN与<>

时间:2019-10-30 22:38:33

标签: sql sql-server performance

相对于使用<和>运算符比较上限和下限日期,我对BETWEEN关键字的性能存在疑问。

示例:

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

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

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

2 个答案:

答案 0 :(得分:0)

根据MSDN:BETWEEN

  

如果test_expression的值大于或等于begin_expression的值且小于或等于end_expression的值,则BETWEEN返回TRUE。

所以你说得对,它具有包容性。

关于您有关性能的第一部分,我相信BETWEEN只是使用>=<=的语法的别名。只是为了简化查询并使查询更具可读性。

我的假设基于以下线程:

sql: BETWEEN v1 and v2

SQL: BETWEEN vs <= and >=

答案 1 :(得分:0)

这两个不一样!

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一起使用进行了很好的讨论。