我有一个带有smallint列的表,其中包含百分比作为整数(即50,75,85等)
当我将此列除以100时,如
SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE
结果四舍五入到最接近的整数。 例如,对于包含数字“50”的行,我的结果为零。
我可以用一个简单的声明复制它:
SELECT 50 / 100 AS TEST_VALUE
为什么会这样,我怎样才能在结果中获得更高的精确度?
答案 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 numeric或float or real。
答案 5 :(得分:0)
你要划分2个整数,这会产生另一个整数。
也应该这样投射
SELECT(50/100):: numeric;