運算子優先順序(Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft 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 +(正)、 - (負)、 + (加法)、 + (串接)、 - (減法)、 & (位 ^AND元排他)、(位元排他OR)、 | (位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。 最後,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;