SELECT -1 * 100 / 10
SELECT 100 * -1 / 10
Run Code Online (Sandbox Code Playgroud)
结果不同.第一次返回-10,第二次0.显然它是由订单引起的.
但是我找不到任何有关除法具有比乘法更高权重的信息.
查看http://technet.microsoft.com/en-gb/library/ms190276%28v=sql.105%29.aspx 乘法和除法是在同一水平上并阅读它的书写
当表达式中的两个运算符具有相同的运算符优先级时,它们将根据它们在表达式中的位置从左到右进行计算.
对此,第二个查询应该像这样评估:100 * -1 -> result / 10不应该吗?
这要么是文档中的“缺陷”,要么是 SQL Server 本身的“缺陷”:根据您的链接,负运算符的运算符-优先级低于乘法和除法,但它对计算的顺序有影响。您可以看到这一点,因为您仅使用 int 值,因此-1/10结果为0. 如果您使用浮点运算,一切都会好起来的:
SELECT -1 * 100 / 10.0
SELECT 100 * -1 / 10.0
Run Code Online (Sandbox Code Playgroud)
或者您可以使用变量来“隐藏”否定:
DECLARE @a int
DECLARE @b int
DECLARE @c int
SELECT @a=-1, @b=100, @c=10
SELECT @a*@b/@c
SELECT @b*@a/@c
Run Code Online (Sandbox Code Playgroud)
和往常一样,对于复杂的算术(复杂意味着多个运算符),您可以使用括号来强制执行某种评估顺序,就像 @Mack 在他的答案中提到的那样。