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
如何
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