2009-10-15 10 views
5

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

SELECT * 
    FROM table 
WHERE col BETWEEN v1 AND v2 

現在、v1がv2より大きい場合、結果は得られません。

col >= v1 AND col <= v2 

ため、この唯一の糖衣構文であるか、またはそれは実際には2つの間のすべての値を取るのでしょうか?私の現在の観察で、私はそれが最初のケースだと思う。

答えて

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 

UPDATE:

SQL-92仕様は言う(引用):

"X BETWEEN Y AND Z" is equivalent to "X>=Y AND X<=Z" 
+0

「7 1と7の間で7を選択」をチェックアウトしてください - すばらしい! –

+0

例はMySQL –

+0

で構文的には有効ではありません(それらを動作させるには 'dualから'を挿入する必要があります) –

11

はい! BETWEEN述語の引数の順序は重要です。 そして、これはAND形式の比較形式の構文糖です。

「ほとんど」、上記論理的に等価ながら、2つの式が(おそらく過去に...)いくつかのSQLサーバー上の個別のクエリプランを受け取ることができるという事実から来ています。今日のほとんどのサーバーでは、その形式に関係なく、このタイプのフィルタの最適な処理が提供されていることは安全です。

3

はい、そうです、あなたが言及した構成の構文砂糖だけです。

関連する問題