Приоритет операторов (Transact-SQL)
Если сложное выражение содержит несколько операторов, порядок выполнения этих операторов определяется их приоритетом. Порядок выполнения может существенно повлиять на значение результата.
Уровни приоритета операторов показаны в следующей таблице. Оператор с более высоким уровнем выполняется прежде, чем оператор с более низким уровнем.
Уровень | Операторы |
---|---|
1 |
~ (побитовое НЕ) |
2 |
* (умножение), / (деление), % (остаток от деления) |
3 |
+ (положительное), - (отрицательное), + (сложение), (+ объединение), - (вычитание), & (побитовое И) |
4 |
=, >, <, >=, <=, <>, !=, !>, !< (операторы сравнения) |
5 |
^ (побитовое исключительное ИЛИ), | (побитовое ИЛИ) |
6 |
NOT |
7 |
AND |
8 |
ALL, ANY, BETWEEN, IN, LIKE, OR, SOME |
9 |
= (присваивание) |
Если два оператора в выражении имеют один и тот же уровень старшинства, они выполняются в порядке слева направо по мере их появления в выражении. Например, если выражение использует инструкцию 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
См. также
Справочник
Операторы (Transact-SQL)
Функции (Transact-SQL)