SQL操作员状态

时间:2018-09-12 12:22:47

标签: sql sql-server operator-precedence

如何

SELECT 80/9*9

在SQL Server中产生72

我点击了以下链接,但得到了不同的答案。 RedGate

5 个答案:

答案 0 :(得分:2)

80 / 9产生8。由于两个操作数都是整数,因此结果也是如此。 /*具有相同的优先级,因此该表达式是从左到右求值的:

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

答案 1 :(得分:2)

正如Juergen所说,它们具有相同的优先级,并且使用integer division可以做到:

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

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

然后:

8 * 9 = 72

答案 2 :(得分:2)

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

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

80 / 9

由于左值是一个整数,因此将得到8,因此,尽管您希望得到的结果是double,但优化器会将值隐式转换为整数。

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

80.0 / 9

答案 3 :(得分:1)

由于*/具有the same precedence(2),因此从左到右一一处理。

答案 4 :(得分:0)

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