乘法和除法的顺序优先级

时间:2013-11-28 10:18:15

标签: tsql

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

结果不同。首先返回-10,第二个0。 显然这是由订单引起的。

但是我找不到任何有关除法的权重高于乘法的信息。

关注http://technet.microsoft.com/en-gb/library/ms190276%28v=sql.105%29.aspx 乘法和除法处于同一水平,并在其上书写

  

当表达式中的两个运算符具有相同的运算符优先级时   等级,他们根据他们在中的位置从左到右进行评估   表达

对此,第二个查询应该像这样评估:100 * -1 -> result / 10,不应该吗?

2 个答案:

答案 0 :(得分:1)

这可能是文档中或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。

答案 1 :(得分:0)

select 100 *-Cast(1 as float)/Cast(10 as float)

您需要将字段强制转换为十进制或浮点数,甚至是数字。