积极答复者
SQL Server运算符的优先级问题

问题
答案
-
Bookonline 上写得很清楚
http://technet.microsoft.com/zh-cn/library/ms190276.aspx
当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序。执行的顺序可能严重地影响所得到的值。
运算符的优先级别如下表中所示。在较低级别的运算符之前先对较高级别的运算符进行求值。
级别 运算符 1
~(位非)
2
*(乘)、/(除)、%(取模)
3
+(正)、-(负)、+(加)、(+连接)、-(减)、&(位与)、^(位异或)、|(位或)
4
=, >, <, >=, <=, <>, !=, !>, !< (比较运算符)
5
NOT
6
AND
7
ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
8
=(赋值)
当一个表达式中的两个运算符有相同的运算符优先级别时,将按照它们在表达式中的位置对其从左到右进行求值
- 已建议为答案 htl258 2010年6月4日 0:55
- 已标记为答案 Nai-dong Jin - MSFTModerator 2010年6月4日 3:39
全部回复
-
Bookonline 上写得很清楚
http://technet.microsoft.com/zh-cn/library/ms190276.aspx
当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序。执行的顺序可能严重地影响所得到的值。
运算符的优先级别如下表中所示。在较低级别的运算符之前先对较高级别的运算符进行求值。
级别 运算符 1
~(位非)
2
*(乘)、/(除)、%(取模)
3
+(正)、-(负)、+(加)、(+连接)、-(减)、&(位与)、^(位异或)、|(位或)
4
=, >, <, >=, <=, <>, !=, !>, !< (比较运算符)
5
NOT
6
AND
7
ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
8
=(赋值)
当一个表达式中的两个运算符有相同的运算符优先级别时,将按照它们在表达式中的位置对其从左到右进行求值
- 已建议为答案 htl258 2010年6月4日 0:55
- 已标记为答案 Nai-dong Jin - MSFTModerator 2010年6月4日 3:39
-
我觉得我发现了问题的所在,大家可以尝试访问以下两个不同的网址:
第一个:http://msdn.microsoft.com/zh-cn/library/ms190276(v=SQL.90).aspx
第二个:http://msdn.microsoft.com/zh-cn/library/ms190276.aspx
前面一个是SQL Server 2005的联机帮助里关于运算符优先级的解释,后面一个是SQL Server 2008的联机帮助里关于运算符优先级的解释。两者的区别恰恰就是位异或(~)和位或(|)两个运算符的优先级发生了变化,2005帮助里将这两个运算符的优先级单独设为5级,而2008帮助里将它们的优先级设为了3级。
不知道这两个是都对呢,还是确实2005帮助出了一些小问题,总之我在2005版本中测试的结果支持2008对于运算符优先级的解释。
从网址上看,2005帮助的网址中多了"v=SQL.90",2008则没有,是不是与SQL 90标准有关呢,不得而知。总之,谢谢楼主了! -
我觉得我发现了问题的所在,大家可以尝试访问以下两个不同的网址:
第一个:http://msdn.microsoft.com/zh-cn/library/ms190276(v=SQL.90).aspx
第二个:http://msdn.microsoft.com/zh-cn/library/ms190276.aspx
前面一个是SQL Server 2005的联机帮助里关于运算符优先级的解释,后面一个是SQL Server 2008的联机帮助里关于运算符优先级的解释。两者的区别恰恰就是位异或(~)和位或(|)两个运算符的优先级发生了变化,2005帮助里将这两个运算符的优先级单独设为5级,而2008帮助里将它们的优先级设为了3级。
不知道这两个是都对呢,还是确实2005帮助出了一些小问题,总之我在2005版本中测试的结果支持2008对于运算符优先级的解释。
从网址上看,2005帮助的网址中多了"v=SQL.90",2008则没有,是不是与SQL 90标准有关呢,不得而知。总之,谢谢楼主了!
在CSDN回过同样的贴子