- 如果执行
SELECT -100/-100*10
,结果为0
。 - 如果执行
SELECT (-100/-100)*10
,结果为10
。 - 如果执行
SELECT -100/(-100*10)
,结果为0
。 - 如果执行
SELECT 100/100*10
,结果为10
。
BOL 表示:
当表达式中两个操作符具有相同的优先级时,它们将根据它们在表达式中的位置从左到右进行评估。
然后
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 上提出问题,看看他们的回应;也许可以在文档中添加一条注释,提示这个“特性”。 - Thom ASELECT -100/(-100)*10
的结果是10。看起来-
被当作负号运算符,应该在计算完100*10
后才应用。 - Panagiotis Kanavos