【问题标题】:Date comparison BETWEEN vs < >日期比较 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是什么类型?

标签: sql sql-server performance


【解决方案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 。 . .谢谢。
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多