2012-04-24 141 views
0

我想分割一些整数来得到一个百分比。默认情况下,我得到一个整数结果,当然,所以我投到十进制。但我也希望结果只能在小数点右边有两个地方。更简洁的方法将整数除法转换为小数

--select (x - y)/y 

select (82 - 56)/56          --0 
select (82 - 56)/cast(56 as decimal(9, 2))    --0.4642857142 
select cast(82 - 56 as decimal(9,2))/56     --0.464285 
select cast((82 - 56)/56 as decimal(9,2))    --0.00 

select cast(cast(82 - 56 as decimal)/56 as decimal(9,2)) --.46 

所以我最终不得不同时抛出一个操作数和整个表达式以获得我想要的结果。有一个更好的方法吗?

注意我把等式放在顶部,表示我显然不使用硬编码的数字(即暗示我在数字不会有帮助的情况下放“.0”)。另外,我通常会将格式化方面留给报告软件,但这些内容会不时复制到Excel电子表格中,我不得不每次都手工格式化。

+0

哪个'RDBMS'? – Quassnoi 2012-04-24 20:00:07

+0

@Quassnoi糟糕,sql 2008 ...刚添加标签,谢谢。 – 2012-04-24 20:01:20

+0

它绝对必须在SQL中完成,或者你能找回Java/C#/ PhP中的结果吗?这对于任何这些语言来说都很简单,实际上我认为你会因为小数点的大小而节省下载带宽。 – ControlAltDel 2012-04-24 20:05:10

回答

3

当分割DECIMALINTEGERSQL Server产生具有精确度的DECIMAL定义为P1 - S1 + S2 + MAX(6中,S1 + P2 + 1),其中snpn是规模和第一精度和第二个参数(divident和divisor)。

最简单的方法是:

SELECT CAST(1. * (x - y)/y AS DECIMAL(9, 2)) 

1.DECIMAL(1, 0)其中,乘以一个整数,产生一个DECIMAL(n, 0)。除以一个整数,它会产生一个DECIMAL(n, 6)(对于与您的示例中的数量相似的数量)。

然后需要将其转换为DECIMAL(9, 2)以截断多余的数字。

+0

不错。我喜欢。 – 2012-04-24 20:35:22

相关问题