乘法和除法的顺序优先级

  • 本文关键字:顺序 优先级 除法 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,不是吗?

这要么是文档中的"缺陷",要么是 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。

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

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

最新更新