小编典典

您应该在 SQL Server 中选择 MONEY 还是 DECIMAL(x,y) 数据类型?

all

money我很好奇数据类型和类似的东西之间是否存在真正的区别decimal(19,4)(我相信这是钱在内部使用的东西)。

我知道这money是特定于 SQL Server 的。我想知道是否有令人信服的理由选择其中一个;大多数 SQL Server 示例(例如
AdventureWorks 数据库)使用money而不是decimal用于价格信息等内容。

我应该继续使用 money 数据类型,还是改用小数有好处?金钱是更少的字符输入,但这不是一个正当的理由:)


阅读 338

收藏
2022-03-11

共1个答案

小编典典

你永远不应该用钱。不精确,纯属垃圾;始终使用十进制/数字。

运行这个看看我的意思:

DECLARE
    @mon1 MONEY,
    @mon2 MONEY,
    @mon3 MONEY,
    @mon4 MONEY,
    @num1 DECIMAL(19,4),
    @num2 DECIMAL(19,4),
    @num3 DECIMAL(19,4),
    @num4 DECIMAL(19,4)

    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

输出:2949.0000 2949.8525

对于一些说你不要用钱来分钱的人:

这是我计算相关性的查询之一,将其更改为金钱会产生错误的结果。

select t1.index_id,t2.index_id,(avg(t1.monret*t2.monret)
    -(avg(t1.monret) * avg(t2.monret)))
            /((sqrt(avg(square(t1.monret)) - square(avg(t1.monret))))
            *(sqrt(avg(square(t2.monret)) - square(avg(t2.monret))))),
current_timestamp,@MaxDate
            from Table1 t1  join Table1 t2  on t1.Date = traDate
            group by t1.index_id,t2.index_id
2022-03-11