sql:BETWEEN v1和v2

kni*_*ttl 5 sql-server between syntactic-sugar

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

SELECT *
  FROM table
 WHERE col BETWEEN v1 AND v2
Run Code Online (Sandbox Code Playgroud)

如果v1大于v2,目前我没有得到任何结果.这只是语法糖吗?

col >= v1 AND col <= v2
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*ter 11

SQL Server 2008:

select 1 
where 5 between 1 and 7
Run Code Online (Sandbox Code Playgroud)

1结果

select 1 
where 5 between 7 and 1
Run Code Online (Sandbox Code Playgroud)

0结果

基于这些结果,以及Postgre文档 我会假设ANSI标准如下(虽然我找不到该文档).

a between x and y
==
a >= x AND a <= y
Run Code Online (Sandbox Code Playgroud)

更新:

SQL-92规范说(引用):

"X BETWEEN Y AND Z" is equivalent to "X>=Y AND X<=Z"
Run Code Online (Sandbox Code Playgroud)


mjv*_*mjv 11

是! BETWEEN谓词中参数的顺序.并且,是的,这是[主要] AND-ed比较形式的语法糖.

上面的"大多数"来自这样一个事实:虽然在逻辑上等价,但是这两个表达式可能(可能在过去......)在某些SQL服务器上接收到不同的查询计划.可以肯定的是,现在大多数服务器都提供这种类型的过滤器的最佳处理,无论其形式如何.