爲什麼以下SQL查詢顯示結果?SQL BETWEEN反向順序中的運算符條件值
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
但是當我們改變價值的順序它不會顯示任何結果?
爲什麼以下SQL查詢顯示結果?SQL BETWEEN反向順序中的運算符條件值
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
但是當我們改變價值的順序它不會顯示任何結果?
SELECT * FROM Products
WHERE Price BETWEEN 20 AND 10;
轉化爲
SELECT * FROM Products
WHERE Price >= 20 AND Price <= 10;
因爲順序很重要。試想想它:
x BETWEEN a AND b
相當於
a <= x AND x <= b
如果a > b
,這不可能是真的。
換句話說,對於BETWEEN
有任何用處,您必須確保a <= b
。
如果test_expression的值大於或等於begin_expression的值且小於或等於end_expression的值,則BETWEEN返回TRUE。 如果test_expression的值小於begin_expression的值或大於end_expression的值,NOT BETWEEN返回TRUE。
在你的情況,你的語句評估爲 greater than or equal to 20 AND less than or equal to 10
http://technet.microsoft.com/de-de/library/ms187922.aspx – DrCopyPaste
的MSDN reference page for T-SQL's BETWEEN
operator說:
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
[...]
BETWEEN
回報TRUE
如果與test_expression的值大於或等於begin_expression的值且小於或等於的值end_表達式。
那麼你正在觀察從定義如下:由於沒有Price
既可以是≥20和≤10在同一時間,條件永遠都無法滿足的,因此所有記錄都被過濾掉。 (另一方面,它是可能爲Price
都≥10和≤20,所以可能會在這種情況下,根據您的數據的結果。)
@MinhD:看看問題的標籤。 – stakx
實際上,這個問題對於任何DBMS都有相同的答案。 – mvp
@stakx:實際上,這個問題沒有任何標籤一見鍾情:) – MinhD