运算符优先级 (Transact-SQL)
适用于:SQL Server Azure 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
。 最后将 6
与 2
相乘,生成表达式的结果 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;