运算符优先级 (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

如果一个复杂表达式有多个运算符,则运算符优先级将确定操作序列。 执行顺序可能对结果值有明显的影响。

运算符的优先级别如下表中所示。 在较低级别的运算符之前先对较高级别的运算符进行求值。 在下表中,1 代表最高级别,8 代表最低级别。

级别 运算符
1 ~(位非)
2 *(乘)、/(除)、%(取模)
3 + (正)、-(负)、+(加法)、+(串联)、-(减法)、和(按位 AND)、^ (按位排他 OR) |(按位或)
4 =、><>=、<=、<>!=、!>!<(比较运算符)
5 NOT
6 AND
7 ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
8 =(赋值)

如果一个表达式中的两个运算符有相同的优先级别,则按照它们在表达式中的位置对其从左到右进行求值。 例如,在下面的 SET 语句所使用的表达式中,在加运算符之前先对减运算符进行求值。

DECLARE @MyNumber INT;  
SET @MyNumber = 4 - 2 + 27;  
-- Evaluates to 2 + 27 which yields an expression result of 29.  
SELECT @MyNumber;  

在表达式中使用括号替代所定义的运算符的优先级。 对括号内的所有内容进行求值会得到一个单一的值。 该值可被括号外的任何运算符使用。

例如,在下面的 SET 语句所使用的表达式中,乘运算符具有比加运算符更高的优先级别。 首先计算乘法运算;表达式结果为 13

DECLARE @MyNumber INT;  
SET @MyNumber = 2 * 4 + 5;  
-- Evaluates to 8 + 5 which yields an expression result of 13.  
SELECT @MyNumber;  

在以下 SET 语句使用的表达式中,括号使加法先进行计算。 此表达式的结果为 18

DECLARE @MyNumber INT;  
SET @MyNumber = 2 * (4 + 5);  
-- Evaluates to 2 * 9 which yields an expression result of 18.  
SELECT @MyNumber;  

如果表达式有嵌套的括号,那么首先对嵌套最深的表达式求值。 以下示例中包含嵌套的括号,其中表达式 5 - 3 在嵌套最深的那对括号中。 该表达式产生一个值 2。 然后,加法运算符 (+) 将此结果与 4 相加,得到值 6。 最后将 62 相乘,生成表达式的结果 12

DECLARE @MyNumber INT;  
SET @MyNumber = 2 * (4 + (5 - 3) );  
-- Evaluates to 2 * (4 + 2) which then evaluates to 2 * 6, and   
-- yields an expression result of 12.  
SELECT @MyNumber;  

另请参阅

逻辑运算符 (Transact-SQL)
运算符 (Transact-SQL)
内置函数 (Transact-SQL)