2014-02-23 51 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)。 –