- 如果执行
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是错误的,还是我缺少什么?似乎-
取消(预期)优先顺序。
7
你有什么问题?
—
Ilyes
为什么您认为必须使用位,而使用整数。和整数/整数=整数。所以-100 / -1000是0
—
sepupic
SELECT -100/(-100)*10
也返回10.它看起来像-
被视为-
只应之后施加操作者100*10
的计算
A / -B * C
是A <div> <negate> B <multiply> C
。根据文档,Negate的优先级比乘法低,因此结果为A / -(B * C)
。您可以通过使用浮动常数更清楚地看到这一点:12e / -13e * 14e
与12e / (-13e) * 14e
VS 12e / 13e * 14e
。其原因,这将引发我们送行,因为我们普遍预期一元负成为文本的一部分,或至少具有很高的优先级,但是这并不怎么T-SQL作品。