货币列的货币,十进制或数字

时间:2014-02-23 17:52:23

标签: sql sql-server

我正在创建一个用于保存事务的SQL表:

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

对于货币(我使用的是欧元)我应该使用金钱,小数还是数字?

我已经看到这三个应用于货币栏,所以我不再确定了。

金钱将是明显的选择......但我已经看过十进制和数字。

顺便说一下,我正在使用SQL Server 2012。

谢谢

4 个答案:

答案 0 :(得分:6)

首先,Decimal和Numeric具有相同的功能(MSDN info about it

要回答新的问题钱VS十进制,已经有一个关于它的Stackoverflow问题:Should you choose the MONEY or DECIMAL(x,y) datatypes in SQL Server? - 简短的回答是:

  

你永远不应该使用钱,它不精确,它是纯垃圾,总是使用十进制/数字

SQLMenace

答案 1 :(得分:1)

Decimal and Numeric适用于almost all purposesequivalent

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的精确度有限,因此更容易出现舍入错误。加法和减法都很好,但是如果你用金钱划分货币(百分比或比率),你就会失去精确度,特别是在重复操作时。