【问题标题】:difference between money & numeric data types? [duplicate]金钱和数字数据类型之间的区别? [复制]
【发布时间】:2015-12-08 00:16:54
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    与 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】:

      您选择的数据类型将取决于相关信息所需的精度。 尽管,顾名思义,Money 数据类型的设计原因显而易见,但它仅限于小数点后四位,这就是为什么数字数据类型经常受到青睐的原因。

      【讨论】:

        【解决方案3】:

        永远不要使用金钱; 1)它是专有的,所以移植它很痛苦。它是几十年前的众多“Sybase 代码博物馆”功能之一。还记得 UNIX 的早期版本吗?

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

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

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

        对货币使用不止一种运算(乘法或除法) 列将产生严重的舍入错误。一种简单的可视化方法 金钱算术是在每个之后放置一个 ROUND() 函数调用 手术。例如,

        金额 = (部分/总金额) * 总金额 可以使用货币算术重写为: 金额 = 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

        【讨论】:

          猜你喜欢
          • 2011-07-18
          • 2013-11-17
          • 2011-07-06
          • 2010-10-28
          • 2014-09-06
          • 2015-03-31
          • 1970-01-01
          • 1970-01-01
          • 2012-11-09
          相关资源
          最近更新 更多