SQL Server 2005'之间'运算符行为 - 错误还是功能?

时间:2011-07-28 20:29:28

标签: sql sql-server tsql sql-server-2005

根据microsoft documentation,'BETWEEN'运算符的行为应该是左侧和右侧的闭合区间,但是,以下代码:

SELECT CASE WHEN (1 BETWEEN 1 AND 2) THEN 'YEAH' ELSE 'NO' END AS [closed in the left],
       CASE WHEN (1 BETWEEN 2 AND 1) THEN 'YEAH' ELSE 'NO' END AS [closed in the right]

另有说明。你能重现吗?你觉得怎么样?

3 个答案:

答案 0 :(得分:15)

使用BETWEEN时,必须始终先指定最小值。您引用的文档表明:

  

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

所以你的第二个CASE实际上正在测试:

1 >= 2 AND 1 <= 1

答案 1 :(得分:5)

您链接的文档说:

  

如果test_expression的值更大,则BETWEEN返回TRUE   大于或等于begin_的值小于或等于   end_expression的值。

所以你得到的结果是正确的。 BETWEEN只是一个简写。

答案 2 :(得分:4)

还应该在某处(我没有完全阅读)说明左边的值应该小于或等于右边的值。您不应该仅仅因为文档可能没有明确告诉您不要向后编码。 : - )