【问题标题】:Order precedence of multiplication and division乘法和除法的顺序优先级
【发布时间】:2013-11-28 10:18:15
【问题描述】:
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,不是吗?

【问题讨论】:

标签: tsql


【解决方案1】:

这是文档或 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 在他的回答中提到的。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-01
      • 2023-01-02
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      相关资源
      最近更新 更多