適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
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;