Has*_*anG 1 t-sql sql-server sql-server-2008
为什么这两个表达式返回不同的结果 这真是太愚蠢了.
SELECT * FROM Table WHERE ID BETWEEN 3 AND 1
SELECT * FROM Table WHERE ID BETWEEN 1 AND 3
Run Code Online (Sandbox Code Playgroud)
Rem*_*anu 12
正如文件所说:
如果test_expression的值大于或等于begin_expression的值且小于或等于end_expression的值,则BETWEEN返回TRUE.
关于交换start_expression和end_expression以匹配最小值和最大值没有说什么.您应该期望记录结果,而不是您认为的结果.
对于奇怪的是,ANSI SQL99标准指定BETWEEN谓词应该包含SYMMETRIC或ASYMMETRIC比较的子句.只允许SYMMETRIC交换start_range和end_range,ASYMMETRIC要求严格.ASYMMETRIC表单是隐式表单.换句话说,如OP建议的那样,解释A BETWEEN X and Y为(A>=X AND A<=Y) OR (A>=Y AND A<=X)不符合标准的实现.
ID BETWEEN 3 AND 1只是简单的手,ID >= 3 AND ID <=1所以永远不会返回任何结果.
如果你看一下查询计划,你会看到,查询文本实际被扩张到这个(编辑或者至少你可以看到这种替代的BETWEEN与>=/ <=在获得汽车parametrised查询)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |