为什么SQL Server会舍弃除以两个整数的结果?

时间:2009-04-06 21:01:24

标签: sql-server templates rounding

我有一个带有smallint列的表,其中包含百分比作为整数(即​​50,75,85等)

当我将此列除以100时,如

SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE

结果四舍五入到最接近的整数。 例如,对于包含数字“50”的行,我的结果为零。

我可以用一个简单的声明复制它:

SELECT 50 / 100 AS TEST_VALUE

为什么会这样,我怎样才能在结果中获得更高的精确度?

6 个答案:

答案 0 :(得分:32)

当你进行整数除法(整数除以整数)时,你总是得到一个整数答案。 50/100 = .50,整数说话为0。

您是否尝试将MY_COLUMN除以100.0?

答案 1 :(得分:24)

投出整数。

SELECT (cast(50 AS float)/100)

答案 2 :(得分:1)

你正在进行整数除法。 50/100为0,余数为50。

您需要使用浮点除法。

答案 3 :(得分:1)

注意 - 请注意,整数除法的余数不是四舍五入的。相反,它被删除了。这相当于调用FLOOR sql函数。

这是常见的,并且被定义为这样,因为当乘以两个整数时,将永远不会出现分数。因此,在乘以整数时,从不假设分数处理方法,但对于整数除法则不能这样做。

在SQL中执行dateTime算法时,这通常会产生影响。

答案 4 :(得分:1)

当您使用/(Divide)运算符

  

返回优先级较高的参数的数据类型。

  

如果整数被除数除以整数除数,则结果为   截断结果的任何小数部分的整数。

因此,您需要将至少一个操作数强制转换为适当的类型:decimal and numericfloat or real

答案 5 :(得分:0)

你要划分2个整数,这会产生另一个整数。

也应该这样投射

SELECT(50/100):: numeric;