适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 数据库
当复杂表达式包含多个运算符时,运算符优先级确定作序列。 执行顺序可能对结果值有明显的影响。
运算符的优先级别如下表中所示。 在较低级别的运算符之前,将计算较高级别的运算符。 在下表中,1 代表最高级别,8 代表最低级别。
| Level | Operators |
|---|---|
| 1 |
~ (位 NOT) |
| 2 |
* (乘法)、 / (除法)、 % (模数) |
| 3 |
+(正)、 - (负)、 + (加 + )、(串联)、 - (减法)、 & (按位)、(位AND^排OR他)、(位位)、(OR<<按位左移)、 | (按位右移) >> |
| 4 |
=、、>、>=<、<=、<>!=、!>、、 !< (比较运算符) |
| 5 | NOT |
| 6 | AND |
| 7 |
ALL、ANY、BETWEEN、IN、LIKE、OR、SOME |
| 8 |
= (赋值) |
| Level | Operators |
|---|---|
| 1 |
~ (位 NOT) |
| 2 |
* (乘法)、 / (除法)、 % (模数) |
| 3 |
+(正)、 - (负)、 + (加 + )、(串联)、 - (减法)、 & (按位)、(位AND排OR他)、 ^| (位位OR) |
| 4 |
=、、>、>=<、<=、<>!=、!>、、 !< (比较运算符) |
| 5 | NOT |
| 6 | AND |
| 7 |
ALL、ANY、BETWEEN、IN、LIKE、OR、SOME |
| 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。 最后将 6 与 2 相乘,生成表达式的结果 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;