我创建一个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个存储字节? –