SQL Server の BETWEEN クエリで v1 と v2 の順序に違いはありますか?
SELECT *
FROM table
WHERE col BETWEEN v1 AND v2
現在、v1 が v2 より大きい場合、結果は得られません。これは唯一の構文糖衣ですか
col >= v1 AND col <= v2
または、実際に2つの間のすべての値を取りますか? 私の現在の観察では、それが最初のケースだと思います。
SQL Server の BETWEEN クエリで v1 と v2 の順序に違いはありますか?
SELECT *
FROM table
WHERE col BETWEEN v1 AND v2
現在、v1 が v2 より大きい場合、結果は得られません。これは唯一の構文糖衣ですか
col >= v1 AND col <= v2
または、実際に2つの間のすべての値を取りますか? 私の現在の観察では、それが最初のケースだと思います。
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 比較形式のシンタックス シュガーです。
上記の「ほとんど」は、論理的には同等であるが、2 つの式が (おそらく過去に...) 一部の SQL サーバーで異なるクエリ プランを受け取る可能性があるという事実に由来します。現在、ほとんどのサーバーは、その形式に関係なく、このタイプのフィルターの最適な処理を提供していると推測できます。
はい、そうです、それはあなたが言及した構造の構文糖衣にすぎません。