SQL BETWEEN反向顺序中的运算符条件值

时间:2014-04-23 09:02:03

标签: sql sql-server tsql

为什么以下SQL查询显示结果?

     SELECT * FROM Products
     WHERE Price BETWEEN 10 AND 20;

但是当我们更改值的顺序时,它不会显示任何结果?

     SELECT * FROM Products
     WHERE Price BETWEEN 20 AND 10;

4 个答案:

答案 0 :(得分:3)

 SELECT * FROM Products
 WHERE Price BETWEEN 20 AND 10;

转换为

 SELECT * FROM Products
 WHERE Price >= 20 AND Price <= 10;

答案 1 :(得分:3)

如果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

答案 2 :(得分:1)

因为订单很重要。来想一想:

x BETWEEN a AND b

相当于

a <= x AND x <= b

如果a > b,这永远不会成真。

换句话说,要使BETWEEN有用,您必须确保a <= b

答案 3 :(得分:0)

MSDN reference page for T-SQL's BETWEEN operator说:

test_expression [ NOT ] BETWEEN begin_expression AND end_expression
     

[...] BETWEEN如果 test_expression 的值大于或等于 begin_expression 的值且小于或等于,则返回TRUE等于 end_expression 的值。

因此,您所观察到的内容遵循以下定义:由于Price同时不能同时≥20且≤10,因此永远不会满足条件,因此会过滤掉所有记录。 (另一方面,Price 可能≥10且≤20,因此在这种情况下可能会有结果,具体取决于您的数据。)