钱与钱的区别数字数据类型?

时间:2015-09-11 12:20:39

标签: sql sql-server sql-server-2008

money&的区别是什么?从实际使用角度来看数字数据类型。如果一个表有钱作为数据类型之一(字段名称说明BreakupAmount)&另一个数字类型(字段名称可能相同或不同)然后是否可以将这两个字段中的条目发布到数据类型为数字的第三个表中(字段名称可能是也可能不是BreakupAmount)?有什么建议吗?

3 个答案:

答案 0 :(得分:2)

永远不要使用MONEY; 1)它是专有的,所以移植它是一种痛苦。它是众多" Sybase Code Museum"几十年前的特征。还记得UNIX的早期版本吗?

2)当你不需要让那些说英语的人听起来像乡巴佬时,用方言编写代码。你最好使用DECIMAL(s,p),这样你就可以使用适当大小的列。

3)它在后端显示和格式化,带有逗号和美元符号。这违背了分层架构的目的。

4)MONEY数据类型有舍入错误。

对钱使用多个操作(乘法或除法) 列将产生严重的舍入错误。一种可视化的简单方法 money算法是在每次之后放置一个ROUND()函数调用 操作。例如,

金额=(部分/总计_amt)* gross_amt 可以使用货币算法重写为: 金额= ROUND(ROUND(部分/ total_amt,4)* gross_amt,4)

舍入到四位小数似乎不是问题,直到 您使用的数字大于10,000。

点击https://social.msdn.microsoft.com/Forums/sqlserver/en-US/de0e5cfe-b984-4700-b81f-a0478a65daf1/difference-between-numeric-and-money-data-type-in-sql-server?forum=transactsql

答案 1 :(得分:1)

Money并没有提供超过Decimal的任何优势。如果最多5个小数位的小数单位在您的货币或数据库模式中无效,则只需使用具有适当精度和比例的Decimal。

DECLARE 
@mon1 MONEY, 
@mon2 MONEY, 
@mon3 MONEY, 
@mon4 MONEY, 
@num1 Numeric(19,6), 
@num2 Numeric(19,6), 
@num3 Numeric(19,6), 
@num4 Numeric(19,6) 

SELECT 
@mon1 = 100, @mon2 = 339, @mon3 = 10000, 
@num1 = 100, @num2 = 339, @num3 = 10000 

SET @mon4 = @mon1/@mon2*@mon3 
SET @num4 = @num1/@num2*@num3 

SELECT @mon4 AS moneyresult, @num4 AS numericresult 

答案 2 :(得分:1)

您选择的数据类型将达到相关信息所需的精度。 即使顾名思义,Money数据类型的设计原因显而易见,它仅限于四位小数,这就是数字数据类型通常受青睐的原因。