2009-09-07 35 views
1

我想將我的浮動字段轉換爲一個十進制字段;我想在我的十進制字段中的精度爲11,2,但是當我試圖改變我的字段的類型(例如:金額)時出現錯誤:「將float轉換爲數據類型數值的算術溢出錯誤 該語句有被終止「。我的字段在表格中是十進制(11,2),我的最大值和最小值分別爲:1,603,837,393.70 < - > -1,688,000,000.00(金額)。如何將我的浮動字段轉換爲SQL Server中的十進制數?

我創建了一個臨時表來取出數據,並改變了我的領域的結構,這工作o.k.但現在我需要將數據放回(臨時表仍然具有原始的浮點字段),並且我只是無法使其使用insert select語句插入值。

因爲我的價值不超過我的類型範圍我不知道爲什麼竟然沒有可能使人對這樣的選擇語句:

select Id,AccountId, cast(Amount as decimal(12,2)) as Amount, 
cast(AmountB as decimal(12,2)) as AmountB 
FROM myTable 

我不能確定不轉換我的領域的原因。

+0

你能發表一些來自該表的數據嗎? – 2009-09-07 19:03:54

回答

5

但是「1,603,837,393.70」的值,就需要十進制(12,2) - 12個數字全中,2小數點後。

也許你誤解了decimal(11,2)的工作方式?這意味着總共11位數 - 左邊9位,小數點右邊2位。

MSDN docs for decimal and numeric types

十進制[(對[,S])]和數字[(對[,S])]

P(精度)

可以存儲的最大小數位總數,小數點左側和右側

Marc

+0

感謝您的解釋。你澄清了我所缺少的關於小數數據類型的基本概念。好的解釋我的誤解。 – Goows 2009-09-07 20:59:13

0

檢查字段類型。他們是對的嗎?

0

你的問題只是令人困惑。你說「我的字段在表格中是十進制(11,2)」,但這與你所說的關於最大值和最小值的內容矛盾,它們不在十進制的範圍內(11,2)。如果您引用的錯誤來自您提供的SELECT查詢,則「金額」或「金額B」的值會超出可用小數點(12,2)類型表示的值範圍:-9,999,999,999.99至9,999,999,999.99。

你會發現這個,如果你運行下面的查詢:

select 
    min(Amount) as minAmount, 
    max(Amount) as maxAmount, 
    min(AmountB) as minAmountB, 
    max(AmountB) as maxAmountB 
from myTable 
相關問題