8

SQL Server の BETWEEN クエリで v1 と v2 の順序に違いはありますか?

SELECT *
  FROM table
 WHERE col BETWEEN v1 AND v2

現在、v1 が v2 より大きい場合、結果は得られません。これは唯一の構文糖衣ですか

col >= v1 AND col <= v2

または、実際に2つの間のすべての値を取りますか? 私の現在の観察では、それが最初のケースだと思います。

4

3 に答える 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"
于 2009-10-15T14:46:05.240 に答える
11

はい!BETWEEN 述語の引数の順序が重要です。そして、はい、これは [ほとんど] AND 比較形式のシンタックス シュガーです。

上記の「ほとんど」は、論理的には同等であるが、2 つの式が (おそらく過去に...) 一部の SQL サーバーで異なるクエリ プランを受け取る可能性があるという事実に由来します。現在、ほとんどのサーバーは、その形式に関係なく、このタイプのフィルターの最適な処理を提供していると推測できます。

于 2009-10-15T14:46:35.040 に答える
4

はい、そうです、それはあなたが言及した構造の構文糖衣にすぎません。

于 2009-10-15T14:47:48.123 に答える