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
,不是吗?
发布于 2013-11-28 05:51:45
这要么是文档中的“缺陷”,要么是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在他的回答中提到的。
发布于 2017-10-03 07:11:15
select 100 *-Cast(1 as float)/Cast(10 as float)
您需要将字段转换为十进制或浮点数,甚至是数字。
https://stackoverflow.com/questions/20263318
复制相似问题