2014-02-23 48 views
3

我創建一個SQL表來保存數據:貨幣,小數或數字爲貨幣的列

create table dbo.TRANSACTIONS 
(
    Id int identity not null, 
    Amount money not null 
); 

對於貨幣(我用歐元),我應該用錢,小數或數字?

我已經看到三個正在應用於貨幣列,所以我不知道了。

錢將是明顯的選擇......但我已經看到小數和數字。

順便說一句,我使用SQL Server 2012的

謝謝

回答

6

首先,小數和數字具有相同的功能(MSDN info about it

要回答新問題錢VS小數,已經有關於它的出現StackOverflow問題:Should you choose the MONEY or DECIMAL(x,y) datatypes in SQL Server? - 簡短的回答是:

永遠不要你應該用錢是不精確,它是純粹的垃圾,總是用十進制/數字

通過SQLMenace

+0

我已閱讀...我在考慮使用十進制(20,4)之前,我在閱讀那篇文章之前使用了十進制(19,4)。爲什麼十進制(19,4)而不是十進制(20,8)例如?任何理由嗎? –

+1

您使用4作爲比例,因爲大多數貨幣精確到4位十進制格。並且使用19作爲精度(p),因爲19是十進制使用9個存儲字節時的最高精度。當你爲p使用20時,你將使用13個字節。您可以在[我的答案中的MSDN鏈接](http://msdn.microsoft.com/zh-cn/library/ms187746.aspx)中閱讀它,所以如果您想要獲得更高的精度,請直接訪問28 – peter

+0

任何原因使用9個存儲字節?在這種情況下,我將用它來存儲付款並對其進行計算......我不認爲我需要這麼高的精度。如果我使用一個像12這樣的小型計算,計算速度會不會更快,或者我需要轉到9才能獲得5個存儲字節? –

0

只使用整數,如果你有大的數據,並希望efficently記憶數據。當您在前端查看數據時,只需將數字除以100.

0

聽起來就像您在使用單一貨幣(歐元)工作,所以我會使用小數而不是金錢。資金的主要優勢在於它可以以「本地區友好」的方式顯示。

錢的精度有限,所以更容易舍入誤差。加法和減法都很好,但如果您通過金錢(百分比或比率)進行分配,您將失去精度,特別是在重複操作時。

1

Decimal and Numericalmost all purposesequivalent

錢不是一個標準的SQL類型,並且可以存在other reasons以避免它。

所以選擇合適的尺度和精度,並使用DECIMAL

回覆:DECIMAL(19,4)VS(20,4)

precision vs storage table here資金的事情了。

19,4將存儲值爲999 999 999 999 999.9999,成本爲9字節。精度爲20時需要13個字節,除非您需要額外的精度(在這種情況下,您可以使用相同的存儲精度爲28),否則IMO將是一種浪費。

另外,對於相同的9個字節,你也可以使用例如19,2,這將存儲 99 999 999 999 999 999.99

+0

我打算用小數(20,4)......你認爲這是合理的嗎? –

+1

我已更新。除非你真的需要額外的精度,否則我會選擇19,4。 FWIW 19,4將美國的逆差存儲在20萬億美元以上。另外,如果你在小數點後不需要4個地方,你可以例如使用19,2來允許更大的值。 – StuartLC

+0

在這種情況下,我只在網站上存儲付款。那麼我需要這麼高的精度嗎?我認爲小數的默認值是(18,4)。在性能方面,18和19之間有很大的差別嗎?我相信在空間方面它是相同的,因爲字節是相同的,除非我使用(5)存儲字節的(9,4)。 –