在 SQL Server 上的 BETWEEN 查询中,v1 和 v2 的顺序是否有区别?
SELECT *
FROM table
WHERE col BETWEEN v1 AND v2
目前,如果v1大于v2,我将无法获得任何结果。这只是语法糖吗?
col >= v1 AND col <= v2
或者它真的取两者之间的所有值吗?根据我目前的观察,我猜测是第一种情况。
在 SQL Server 上的 BETWEEN 查询中,v1 和 v2 的顺序是否有区别?
SELECT *
FROM table
WHERE col BETWEEN v1 AND v2
目前,如果v1大于v2,我将无法获得任何结果。这只是语法糖吗?
col >= v1 AND col <= v2
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"
是的!在BETWEEN谓词中参数的顺序很重要。而且,是的,这基本上是AND比较形式的语法糖。
"基本上"是因为尽管两个表达式在逻辑上等价,但在某些SQL服务器上,它们可能(过去可能)接收到不同的查询计划。现在可以安全地猜测,大多数服务器都可以优化处理这种类型的过滤器,无论其形式如何。