sql:BETWEEN v1和v2

时间:2009-10-15 14:42:22

标签: sql-server between syntactic-sugar

在SQL Server的BETWEEN查询中,v1和v2的顺序是否有差异?

SELECT *
  FROM table
 WHERE col BETWEEN v1 AND v2

目前,如果v1大于v2,我不会得到任何结果。这只是

的语法糖
col >= v1 AND col <= v2

还是它真的取两者之间的所有价值?根据我目前的观察结果,我猜这是第一种情况。

3 个答案:

答案 0 :(得分:11)

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"

答案 1 :(得分:11)

是的! BETWEEN谓词中参数的顺序。 而且,是的,这主要是AND-ed比较表的语法糖。

上面的“大多数”来自于这样一个事实:虽然 在逻辑上等同于 ,但这两个表达式可能(可能在过去......)中收到一个明确的查询计划在一些SQL服务器上。可以肯定的是,现在大多数服务器都能对这种类型的过滤器进行最佳处理,无论其形式如何。

答案 2 :(得分:3)

是的,你是对的,它只是你所提到的构造的语法糖。