运算符优先级 (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 数据库

当复杂表达式包含多个运算符时,运算符优先级确定作序列。 执行顺序可能对结果值有明显的影响。

运算符的优先级别如下表中所示。 在较低级别的运算符之前,将计算较高级别的运算符。 在下表中,1 代表最高级别,8 代表最低级别。

Level Operators
1 ~ (位 NOT
2 * (乘法)、 / (除法)、 % (模数)
3 +(正)、 - (负)、 + (加 + )、(串联)、 - (减法)、 & (按位)、(位AND^OR他)、(位位)、(OR<<按位左移)、 | (按位右移) >>
4 =、、>>=<<=<>!=!>、、 !< (比较运算符)
5 NOT
6 AND
7 ALLANYBETWEENINLIKEORSOME
8 = (赋值)
Level Operators
1 ~ (位 NOT
2 * (乘法)、 / (除法)、 % (模数)
3 +(正)、 - (负)、 + (加 + )、(串联)、 - (减法)、 & (按位)、(位ANDOR他)、 ^| (位位OR
4 =、、>>=<<=<>!=!>、、 !< (比较运算符)
5 NOT
6 AND
7 ALLANYBETWEENINLIKEORSOME
8 = (赋值)

当表达式中的两个运算符具有相同的优先级时,计算基于表达式中的位置从左到右进行。 例如,在以下 SET 语句中使用的表达式中,减法运算符在加法运算符之前计算。

DECLARE @MyNumber AS INT;
SET @MyNumber = 4 - 2 + 27;

-- Evaluates to 2 + 27 which yields an expression result of 29.
SELECT @MyNumber;

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

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

DECLARE @MyNumber AS INT;
SET @MyNumber = 2 * 4 + 5;

-- Evaluates to 8 + 5 which yields an expression result of 13.
SELECT @MyNumber;

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

DECLARE @MyNumber AS 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 AS 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;