代码之家  ›  专栏  ›  技术社区  ›  Yada

之间的SQL Server效率不高

  •  4
  • Yada  · 技术社区  · 15 年前

    我记得在某个地方听到或读到

    SELECT * from TABLE where date >= '2009-01-01' AND date <= '2009-12-31'
    

    效率比

    SELECT * from TABLE where date BETWEEN '2009-01-01' AND '2009-12-31'
    

    其中,日期列是日期时间类型,并且具有相同的索引。这是正确的吗?

    1 回复  |  直到 15 年前
        1
  •  11
  •   Quassnoi    15 年前

    不,这不正确。

    两种语法完全相同。

    BETWEEN 只是语法糖,是 >= … AND <= …

    所有主要系统也是如此( Oracle , MySQL ,请 PostgreSQL ),不仅是为了 SQL Server .

    但是,如果要检查当前年份中的日期,则应使用以下语法:

    date >= '2009-01-01' AND date < '2010-01-01'
    

    注意最后一个条件是严格的。

    这是 语义上 不同于 之间 这是查询当前年份(而不是 YEAR(date) = 2009 这是不可分析的)。

    不能将此条件重写为 之间 因为上一个不等式是严格的 之间 条件包括范围边界。

    你需要严格的条件,因为 DATETIME 与整数不同,s不是 well-ordered 也就是说,您不能告诉“最后一个可能的日期时间值” 2009 “(当然,这不是具体的实施)。