我正在创建一个用于保存事务的SQL表:
create table dbo.TRANSACTIONS
(
Id int identity not null,
Amount money not null
);
对于货币(我使用的是欧元)我应该使用金钱,小数还是数字?
我已经看到这三个应用于货币栏,所以我不再确定了。
金钱将是明显的选择......但我已经看过十进制和数字。
顺便说一下,我正在使用SQL Server 2012。
谢谢
答案 0 :(得分:6)
首先,Decimal和Numeric具有相同的功能(MSDN info about it)
要回答新的问题钱VS十进制,已经有一个关于它的Stackoverflow问题:Should you choose the MONEY or DECIMAL(x,y) datatypes in SQL Server? - 简短的回答是:
你永远不应该使用钱,它不精确,它是纯垃圾,总是使用十进制/数字
答案 1 :(得分:1)
Decimal and Numeric适用于almost all purposes,equivalent
Money不是标准的Sql类型,可能还有other reasons来避免它。
因此,请选择合适的比例和精度,并使用DECIMAL
。
Re:DECIMAL(19,4)vs(20,4)
precision vs storage table here总结了一切。
19,4
将存储999 999 999 999 999.9999
的值,代价为9个字节。精度为20将需要13
个字节,除非您需要额外的精度,否则IMO将是一种浪费(在这种情况下,您可以使用相同的存储精度为28)。
此外,对于相同的9个字节,您也可以使用例如19,2
,将存储
99 999 999 999 999 999.99
答案 2 :(得分:0)
如果你有大数据并想要有效记忆数据,只需使用整数。当您在前端查看数据时,只需将数字除以100.
答案 3 :(得分:0)
听起来你在使用单一货币(欧元)工作,所以我会使用小数而不是金钱。金钱的主要优点是它可以以“区域友好”的方式显示。
Money的精确度有限,因此更容易出现舍入错误。加法和减法都很好,但是如果你用金钱划分货币(百分比或比率),你就会失去精确度,特别是在重复操作时。