日期比较 BETWEEN vs < >

Posted

技术标签:

【中文标题】日期比较 BETWEEN vs < >【英文标题】:Date comparison BETWEEN vs < > 【发布时间】:2019-10-30 22:38:33 【问题描述】:

我有一个关于 BETWEEN 关键字与使用 运算符比较上限和下限日期的性能的问题。

例子:

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

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

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

【问题讨论】:

试一试,同时运行“显示执行计划”,看看哪个效果更好, 这能回答你的问题吗? SQL : BETWEEN vs <= and >= EncDate是什么类型? 【参考方案1】:

根据 MSDN:BETWEEN

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

所以你是对的,它是包容性的。

关于性能问题的第一部分,我相信BETWEEN 只是使用&gt;=&lt;= 的语法的别名。这只是为了简化查询并使查询更具可读性。

我的假设基于以下线程:

sql: BETWEEN v1 and v2

SQL: BETWEEN vs <= and >=

【讨论】:

【参考方案2】:

这两个不一样!

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)进行了很好的讨论。

【讨论】:

@Alex 。 . .谢谢。

以上是关于日期比较 BETWEEN vs < >的主要内容,如果未能解决你的问题,请参考以下文章

比较 T-SQL Between 和 '<' '>' 运算符的性能差异?

HQL 中的 between 是不是严格比较?

Orcale日期函数to_date(),to_char()

比较运算符

BETWEEN 子句与 <= AND >=

BETWEEN 子句与 <= AND >=