SQL从int转换为十进制

时间:2012-04-10 20:45:53

标签: sql sql-server-2005 casting

我在表中有两列用整数值填充。对于每条记录,我想划分这两列的值并格式化输出,以便将小数点移动到右侧的位置。

例如,如果我将一个记录的两列值设为4和1,并且我想将1除以4(所以1/4),那么我希望输出为25.00。

这是我以前尝试过的最后一件事:

CAST(Total AS Decimal(2))/CAST(TotalAnswers AS Decimal(2)) AS 'Percent' 

我无法找到CAST函数的语法解释,看看传递的十进制参数代表什么。当我改变它时,它确实有时会改变小数点右边的位置数,但结果并不总是我所期望的,所以我想得到一些帮助。

4 个答案:

答案 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)

实际上有几个参数..

(p, s)

,其中

  • p表示“精度” - 小数点前后的总位数
  • 表示“比例” - 小数点后的位数。

只给出1个参数,你只给出了精度。

请参阅MDSN

答案 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。最大存储大小因精度而异。