【问题标题】:SQL WHERE Clause condition evaluationSQL WHERE 子句条件评估
【发布时间】:2014-12-13 14:54:15
【问题描述】:

我有一个简单的问题,但我找不到答案。在 SQL WHERE 子句中哪个更好?

TO_CHAR (DAT, 'YYYYMMDD') BETWEEN '20080101' AND '20131231'

DAT BETWEEN TO_DATE('20080101','YYYYMMDD') AND TO_DATE('20131231','YYYYMMDD')

条件值是只计算一次,然后对表中的每一行进行测试,还是 SQL 引擎每次都重新计算?

【问题讨论】:

    标签: sql date where-clause


    【解决方案1】:

    任何涉及常量和文字的参数都只会被计算一次。然而,第二个要好得多 - 它允许您对 dat 列进行索引,然后使用该索引来提高性能,而第一个查询将不允许使用该索引。

    【讨论】:

    • 是的,我就是这么想的!谢谢!
    • “第二个好多了”……“第二个不会”,我猜应该是第二个短语中的“第一”。如果有编辑权限的人(甚至是 OP,如果他看到了这个)可以纠正这句话,那就太好了:)
    【解决方案2】:

    这是最好的:

    “2008-01-01”和“2013-12-31”之间的日期

    SQL 也有日期/时间类型的文字,因此不需要调用任何这些标量函数。

    顺便说一句,您标记了问题SQL。这意味着您的问题与标准 SQL 有关,而不是与任何特定引擎和/或其实现的方言有关(将鼠标悬停在标签上并阅读其内容)。该标准要求本示例中使用的日期格式。特定引擎可能支持日期文字的其他格式,例如“2013 年 12 月 31 日”或“2013 年 12 月 31 日”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多