我創建一個SQL表來保存數據:貨幣,小數或數字爲貨幣的列
create table dbo.TRANSACTIONS
(
Id int identity not null,
Amount money not null
);
對於貨幣(我用歐元),我應該用錢,小數或數字?
我已經看到三個正在應用於貨幣列,所以我不知道了。
錢將是明顯的選擇......但我已經看到小數和數字。
順便說一句,我使用SQL Server 2012的
謝謝
我創建一個SQL表來保存數據:貨幣,小數或數字爲貨幣的列
create table dbo.TRANSACTIONS
(
Id int identity not null,
Amount money not null
);
對於貨幣(我用歐元),我應該用錢,小數或數字?
我已經看到三個正在應用於貨幣列,所以我不知道了。
錢將是明顯的選擇......但我已經看到小數和數字。
順便說一句,我使用SQL Server 2012的
謝謝
首先,小數和數字具有相同的功能(MSDN info about it)
要回答新問題錢VS小數,已經有關於它的出現StackOverflow問題:Should you choose the MONEY or DECIMAL(x,y) datatypes in SQL Server? - 簡短的回答是:
永遠不要你應該用錢是不精確,它是純粹的垃圾,總是用十進制/數字
只使用整數,如果你有大的數據,並希望efficently記憶數據。當您在前端查看數據時,只需將數字除以100.
聽起來就像您在使用單一貨幣(歐元)工作,所以我會使用小數而不是金錢。資金的主要優勢在於它可以以「本地區友好」的方式顯示。
錢的精度有限,所以更容易舍入誤差。加法和減法都很好,但如果您通過金錢(百分比或比率)進行分配,您將失去精度,特別是在重複操作時。
Decimal and Numeric是almost all purposes,equivalent
錢不是一個標準的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
我打算用小數(20,4)......你認爲這是合理的嗎? –
我已更新。除非你真的需要額外的精度,否則我會選擇19,4。 FWIW 19,4將美國的逆差存儲在20萬億美元以上。另外,如果你在小數點後不需要4個地方,你可以例如使用19,2來允許更大的值。 – StuartLC
在這種情況下,我只在網站上存儲付款。那麼我需要這麼高的精度嗎?我認爲小數的默認值是(18,4)。在性能方面,18和19之間有很大的差別嗎?我相信在空間方面它是相同的,因爲字節是相同的,除非我使用(5)存儲字節的(9,4)。 –
我已閱讀...我在考慮使用十進制(20,4)之前,我在閱讀那篇文章之前使用了十進制(19,4)。爲什麼十進制(19,4)而不是十進制(20,8)例如?任何理由嗎? –
您使用4作爲比例,因爲大多數貨幣精確到4位十進制格。並且使用19作爲精度(p),因爲19是十進制使用9個存儲字節時的最高精度。當你爲p使用20時,你將使用13個字節。您可以在[我的答案中的MSDN鏈接](http://msdn.microsoft.com/zh-cn/library/ms187746.aspx)中閱讀它,所以如果您想要獲得更高的精度,請直接訪問28 – peter
任何原因使用9個存儲字節?在這種情況下,我將用它來存儲付款並對其進行計算......我不認爲我需要這麼高的精度。如果我使用一個像12這樣的小型計算,計算速度會不會更快,或者我需要轉到9才能獲得5個存儲字節? –