2012-04-10 67 views
8

我在表中有两列填充了整数值。对于每条记录,我想分割这两列的值并格式化输出,以便小数点移动到右侧。SQL从int转换为十进制

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

这里是我尝试了一下前的最后一件事:

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

我一直没能找到CAST功能的语法解释,看看有什么十进制传入的参数表示。当我改变它时,它有时会改变小数点右边的位数,但结果并不总是我期待的,所以我想在这里得到一些帮助。

回答

18

写这样的:

SELECT CAST(CAST(Total As float)/TotalAnswers * 100 As decimal(8, 2)) 
+0

真棒,非常感谢你。 – Darren 2012-04-10 20:57:38

2

DECIMAL(2)是小数点前2位数的小数点,小数点后没有数位。那不允许你在小数点后有数字

DECIMAL(p,s)规范定义总位数的(p)的数目和小数点(s)(其中s不能大于p更大并且是0,如果ommitted)后的位数。

你需要使用像DECIMAL(4,2) - ;:或类似的东西(4位共有2个小数点之后的等于是小数点前还2) - 之前的一些数字和一些小数点后 - 那么你会看到你想要的结果!

有关DECIMAL类型及其语法的详细信息,请查阅decimal and numeric

2

有实际的几个参数的MSDN联机丛书主题..

(p, s) 

其中

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

通过仅给出1个参数,您只给出了精度。

参见MDSN

1

来自book-online的十进制数据类型: 具有固定精度和比例的数字数据类型。

十进制[(p [,s])]和数字[(p [,s])] 固定的精度和标度数。当使用最大精度时,有效值从 - 10^38 +1到10^38 - 1。小数的SQL-92同义词是dec和dec(p,s)。数字在功能上等同于小数。

p(precision) 可以存储的最大小数位总数,小数点的左边和右边都可以存储。精度必须是从1到38的最大精度的值。默认精度为18.

s(比例) 可存储在小数点右侧的最大小数位数。比例必须是从0到p的值。只有在指定了精度的情况下才能指定比例。默认比例是0;因此,0 < = s < = p。根据精度,最大存储大小会有所不同。