SQL运算符优先级

问题描述 投票:2回答:5

怎么样

SELECT 80/9*9

结果SQL Server中的72

我按照下面的链接,但我得到了一个不同的答案。 RedGate

sql sql-server operator-precedence
5个回答
2
投票

正如Juergen所说,它们具有相同的优先权,而且它具有integer division

80/9 = 8 (as the remainder/decimal part is removed)

如果整数被除数除以整数除数,则结果是一个整数,其截断结果的任何小数部分。

然后:

8 * 9 = 72

2
投票

80 / 9收益8。由于两个操作数都是整数,因此结果也是如此。 /*具有相同的优先级,因此表达式从左到右进行评估:

   80 / 9 * 9
-> 8 * 9
-> 72

2
投票

数学运算符在SQL中具有与在数学中相同的优先级。

由于隐式转换,您的查询结果为72:

80 / 9

将得到8,因为左值是一个整数,所以尽管你期望得到double的结果,优化器会隐式地将值转换为整数。

您可以使用左侧双精度值“覆盖”隐式强制转换:

80.0 / 9

1
投票

由于*/the same precedence(2),它从左到右逐个处理。


0
投票

当表达式中的两个运算符具有相同的运算符优先级时,它们将根据它们在表达式中的位置从左到右进行计算。这里*和/具有相同的优先级。

© www.soinside.com 2019 - 2024. All rights reserved.