我有一个带有 smallint 列的表,其中包含整数百分比(即 50、75、85 等)
当我将此列除以 100 时,如
SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE
结果四舍五入到最接近的整数。例如,对于包含数字“50”的行,我的结果是零。
我可以用一个简单的语句来复制它:
SELECT 50 / 100 AS TEST_VALUE
为什么会这样,我怎样才能获得更精确的结果?
我有一个带有 smallint 列的表,其中包含整数百分比(即 50、75、85 等)
当我将此列除以 100 时,如
SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE
结果四舍五入到最接近的整数。例如,对于包含数字“50”的行,我的结果是零。
我可以用一个简单的语句来复制它:
SELECT 50 / 100 AS TEST_VALUE
为什么会这样,我怎样才能获得更精确的结果?
当你进行整数除法(整数除以整数)时,你总是得到一个整数答案。50/100 = .50,以整数表示为 0。
您是否尝试过将 MY_COLUMN 除以 100.0?
投整数。
SELECT (cast(50 AS float)/100)
你正在做整数除法。50/100 为 0,余数为 50。
您需要使用浮点除法。
注意 - 请注意整数除法的余数未四舍五入。相反,它被丢弃了。这相当于调用 FLOOR sql 函数。
这很常见,并且这样定义是因为当两个整数相乘时,永远不会出现分数。因此,在乘以整数时从不假定使用分数处理方法,但对于整数除法则不能这样说。
在 SQL 中执行 dateTime 算术时,这通常会产生影响。
您将 2 个整数相除,得到另一个整数。
应该也可以这样投
选择(50/100)::数字;