2012-04-10 41 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。根據精度,最大存儲大小會有所不同。