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
,不应该吗?
答案 0 :(得分: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。
答案 1 :(得分:0)
select 100 *-Cast(1 as float)/Cast(10 as float)
您需要将字段强制转换为十进制或浮点数,甚至是数字。