SQL 运算符优先级

SQL Operator presedence

如何

SELECT 80/9*9

在 SQL 服务器中产生 72

我遵循了以下 link 但我得到了不同的答案。 RedGate

由于*/the same precedence (2)从左到右一一处理。

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

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

正如 Juergen 所说,它们的优先级与 integer division 相同:

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

If an integer dividend is divided by an integer divisor, the result is an integer that has any fractional part of the result truncated.

然后:

8 * 9 = 72

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

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

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

80 / 9

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

您可以 "override" 使用左双精度值进行隐式转换:

80.0 / 9