在转换相关字段(如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 |