sqlserver where子句中多个and的执行顺序问题

在转换相关字段(如varchar转int)的时候,需要前面的and把特殊的不能转换的字符过滤掉,如‘–’,此时,需要依赖and的查询顺序。

经测验,and子句没有明显的查询顺序要求,也就是说,只要and中包含了过滤条件,不管过滤条件在什么位置,执行都会成功,多个and之间的执行地位是平级的。

下面的sql的执行结果是相同的。

SELECT AlarmLevel FROM AlarmCountConfig WHERE CONVERT(FLOAT,ALARMLEVEL)>0 AND AlarmLevel <> '' AND  AlarmLevel <> '--' 
SELECT AlarmLevel FROM AlarmCountConfig WHERE  AlarmLevel <> '' AND  AlarmLevel <> '--' AND CONVERT(FLOAT,ALARMLEVEL)>0 

另外,当空字符串在数值转换的时候会被转换成0
带where子句查询单个字段的时候,NULL值会直接被过滤

SELECT ALARMLEVEL FROM AlarmCountConfig WHERE    AlarmLevel <> '--'

结果:

ALARMLEVEL
2
SELECT ALARMLEVEL FROM AlarmCountConfig

结果:

ALARMLEVEL
2
NULL
NULL
NULL
NULL

猜你喜欢

转载自blog.csdn.net/u010178308/article/details/88884323