在SQL Server的BETWEEN查询中,v1和v2的顺序是否有差异?
SELECT *
FROM table
WHERE col BETWEEN v1 AND v2
目前,如果v1大于v2,我不会得到任何结果。这只是
的语法糖col >= v1 AND col <= v2
还是它真的取两者之间的所有价值?根据我目前的观察结果,我猜这是第一种情况。
答案 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)
是的,你是对的,它只是你所提到的构造的语法糖。