2012-04-24 142 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

相關問題