我在表中有两列用整数值填充。对于每条记录,我想划分这两列的值并格式化输出,以便将小数点移动到右侧的位置。
例如,如果我将一个记录的两列值设为4和1,并且我想将1除以4(所以1/4),那么我希望输出为25.00。
这是我以前尝试过的最后一件事:
CAST(Total AS Decimal(2))/CAST(TotalAnswers AS Decimal(2)) AS 'Percent'
我无法找到CAST函数的语法解释,看看传递的十进制参数代表什么。当我改变它时,它确实有时会改变小数点右边的位置数,但结果并不总是我所期望的,所以我想得到一些帮助。
答案 0 :(得分:19)
像这样写:
SELECT CAST(CAST(Total As float) / TotalAnswers * 100 As decimal(8, 2))
答案 1 :(得分:2)
DECIMAL(2)
是前两位数的小数,小数点后没有数字。这不允许你在小数点后有数字!
DECIMAL(p,s)
规范定义总位数(p
)和小数点后的位数(s
)(其中s
不能大于p
如果省略则为0。
你需要使用DECIMAL(4,2)
之类的东西(总共4位数 - 其中2位小数点之后;因此:小数点之前也是2位)或类似的东西 - 一些小数点之前和之后的数字 - 然后你会看到你想要的结果!
有关DECIMAL
类型及其语法的详细信息,请参阅decimal and numeric上的MSDN联机丛书主题
答案 2 :(得分:2)
答案 3 :(得分:1)
来自book-online的十进制数据类型: 具有固定精度和比例的数字数据类型。
十进制[(p [,s])]和数字[(p [,s])] 固定精度和刻度数。当使用最大精度时,有效值为 - 10 ^ 38 +1到10 ^ 38 - 1.十进制的SQL-92同义词是dec和dec(p,s)。 numeric在功能上等同于十进制。
p(精度) 小数点左侧和右侧可存储的最大小数位数。精度必须是从1到最大精度为38的值。默认精度为18。
s(规模) 可以存储在小数点右侧的最大小数位数。比例必须是从0到p的值。只有在指定精度时才能指定比例。默认比例为0;因此,0 <= s <= p。最大存储大小因精度而异。