乘法和除法的顺序优先级

2024-01-25

SELECT -1 * 100 / 10
SELECT 100 * -1 / 10

结果不同。首次回归-10, 第二0。 显然这是由命令引起的。

但我找不到任何信息表明除法的权重高于乘法。

看着http://technet.microsoft.com/en-gb/library/ms190276%28v=sql.105%29.aspx 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

或者您可以使用变量来“隐藏”否定:

DECLARE @a int
DECLARE @b int
DECLARE @c int

SELECT @a=-1, @b=100, @c=10

SELECT @a*@b/@c
SELECT @b*@a/@c

和往常一样,对于复杂的算术(复杂意味着多个运算符),您可以使用括号来强制执行某种评估顺序,就像 @Mack 在他的答案中提到的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

乘法和除法的顺序优先级 的相关文章

随机推荐