sql: BETWEEN v1 AND v2

8

在 SQL Server 上的 BETWEEN 查询中,v1 和 v2 的顺序是否有区别?

SELECT *
  FROM table
 WHERE col BETWEEN v1 AND v2

目前,如果v1大于v2,我将无法获得任何结果。这只是语法糖吗?

col >= v1 AND col <= v2

或者它真的取两者之间的所有值吗?根据我目前的观察,我猜测是第一种情况。
3个回答

13

SQL Server 2008:

select 1 
where 5 between 1 and 7

1个结果

select 1 
where 5 between 7 and 1

0个结果

根据这些结果和Postgre文档,我猜测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"

看看这个程序代码:"select 1 where 7 between 7 and 1" - 真棒! - Cade Roux
示例在MySQL中不是语法正确的。 - törzsmókus
1
@törzsmókus 可能是因为这是一个 SQL Server 的问题。 - Atys

11

是的!在BETWEEN谓词中参数的顺序很重要。而且,是的,这基本上是AND比较形式的语法糖。

"基本上"是因为尽管两个表达式在逻辑上等价,但在某些SQL服务器上,它们可能(过去可能)接收到不同的查询计划。现在可以安全地猜测,大多数服务器都可以优化处理这种类型的过滤器,无论其形式如何。


4
是的,你是正确的。这只是你提到的结构的一种语法糖。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接