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

SQL:在v1和v2之间

  •  5
  • knittl  · 技术社区  · 15 年前

    在SQL Server上的查询之间,v1和v2的顺序是否存在差异?

    SELECT *
      FROM table
     WHERE col BETWEEN v1 AND v2
    

    目前,如果v1大于v2,我不会得到任何结果。这是唯一的句法糖分吗

    col >= v1 AND col <= v2
    

    或者它真的需要这两者之间的所有值吗?根据我目前的观察,我想这是第一例。

    3 回复  |  直到 7 年前
        1
  •  11
  •   onedaywhen    15 年前

    SQL Server 2008:

    select 1 
    where 5 between 1 and 7
    

    1结果

    select 1 
    where 5 between 7 and 1
    

    0结果

    根据这些结果, Postgre Docs 我假设ANSI标准如下(尽管我找不到那个文件)。

    a between x and y
    ==
    a >= x AND a <= y
    

    更新:

    SQL-92规范说(引用):

    "X BETWEEN Y AND Z" is equivalent to "X>=Y AND X<=Z"
    
        2
  •  11
  •   mjv    15 年前

    对!两个谓词之间的参数顺序。 是的,这是和ed比较形式的句法糖。

    上述“大部分”来源于以下事实: 逻辑等价 ,这两个表达式可能(可能在过去…)在某些SQL服务器上接收到不同的查询计划。现在,大多数服务器都可以提供这种类型的过滤器的最佳处理,而不管其形式如何,这是一个安全的猜测。

        3
  •  3
  •   Maximilian Mayerl    15 年前

    是的,你是对的,这只是你提到的结构的语法糖分。