日期比较 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
只是使用>=
和<=
的语法的别名。这只是为了简化查询并使查询更具可读性。
我的假设基于以下线程:
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 < >的主要内容,如果未能解决你的问题,请参考以下文章