- Якщо ви виконаєте
SELECT -100/-100*10
результат є0
. - Якщо ви виконуєте
SELECT (-100/-100)*10
результат є10
. - Якщо ви виконуєте
SELECT -100/(-100*10)
результат є0
. - Якщо ви виконаєте
SELECT 100/100*10
результат є10
.
БОЛ заявляє:
Коли два оператори в виразі мають однаковий рівень пріоритетності оператора, вони оцінюються зліва направо на основі їх положення в виразі.
І
Level Operators
1 ~ (Bitwise NOT)
2 * (Multiplication), / (Division), % (Modulus)
3 + (Positive), - (Negative), + (Addition), + (Concatenation), - (Subtraction), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR)
BOL помиляється, чи я щось пропускаю? Здається, -
це відкидає (очікуваний) пріоритет.
-
, здається, викликає потік "неправильно". Якщо ви спробуєте, -100/(-100)*10
ви отримаєте результат 10
. видається, що значення /
застосовується проти значення -
в рівнянні, а потім визначається рівняння 100*10
. Я не впевнений, що це помилка з BOL, але більше того, що SQL Server не веде себе так, як очікувалося. Можливо, варто підняти проблему на sql-docs і подивитися, на що їх відповідь; можливо, до документації, що свідчить про "особливість", може бути додана примітка.
SELECT -100/(-100)*10
також повертається 10. Схоже -
, трактується як -
оператор, який слід застосувати лише після того, як 100*10
буде обчислено
A / -B * C
є A <div> <negate> B <multiply> C
. Негати мають нижчий пріоритет, ніж множення, на документи, тому результат такий A / -(B * C)
. Ви можете зрозуміти це більш чітко, використовуючи плаваючі константи: 12e / -13e * 14e
порівняно 12e / (-13e) * 14e
проти 12e / 13e * 14e
. працює.