運算子優先順序 (Transact-SQL)
當複雜運算式有多個運算子時,運算子優先順序會決定作業的執行順序。執行順序會對產生的值有重大影響。
下表顯示運算子的優先順序層級。先評估層級較高的運算子,再評估層級較低的運算子。
層級 |
運算子 |
---|---|
1 |
~ (位元 NOT) |
2 |
* (乘法)、/ (除法), % (模數) |
3 |
+ (正)、- (負)、+ (加法)、(+ 串連)、- (減法)、& (位元 AND)、^ (位元排除 OR)、| (位元 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