22

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

当我将此列除以 100 时,如

SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE

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

我可以用一个简单的语句来复制它:

SELECT 50 / 100 AS TEST_VALUE

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

4

6 回答 6

36

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

您是否尝试过将 MY_COLUMN 除以 100.0?

于 2009-04-06T21:03:42.213 回答
26

投整数。

SELECT (cast(50 AS float)/100)
于 2009-04-06T21:05:05.050 回答
1

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

您需要使用浮点除法。

于 2009-04-06T21:03:47.393 回答
1

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

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

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

于 2010-08-04T00:39:22.357 回答
1

当您使用/(Divide)运算符时

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

如果整数被除数除以整数除数,则结果是一个整数,结果的任何小数部分都被截断。

因此,您需要将至少一个操作数转换为适当的类型:十进制和数字浮点或实数

于 2015-01-12T16:06:18.917 回答
0

您将 2 个整数相除,得到另一个整数。

应该也可以这样投

选择(50/100)::数字;

于 2009-04-06T21:45:19.773 回答