【问题标题】:How to convert a currency column of a table into a numeric column in postgresql如何将表的货币列转换为postgresql中的数字列
【发布时间】:2016-09-10 07:11:02
【问题描述】:

我们需要让我们的架构支持多种货币。因此,使用货币字段不是一种选择。所以,我正在尝试将货币列转换为数字(12,2)。我尝试了以下方法:

ALTER TABLE lead ALTER COLUMN deal_size TYPE NUMERIC(12, 2);
ALTER TABLE lead ALTER COLUMN deal_size TYPE NUMERIC(12, 2) using deal_size::money::numeric(12,2);

每次我收到以下错误:

错误:数值字段溢出 DETAIL:精度为 12、比例为 2 的字段必须舍入到小于 10^10 的绝对值

我确认表中该列的值均不超过 1,000,000 美元

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    我在我的 PostgreSQL 中测试了以下内容,并且运行良好。你运行的是什么版本的 PostgreSQL?

    create temp table lead (id serial not null primary key, deal_size money);
    insert into lead (deal_size) select (random()*100000000)::numeric(14,4) from generate_series(1,10000) a;
    ALTER TABLE lead ALTER COLUMN deal_size TYPE NUMERIC(12, 2);
    

    您没有超过一百万的值。您是否测试过较大的负值?

    【讨论】:

    • 非常感谢您的回复。这是我的一个愚蠢的错误。我没有意识到有几个大的负值(作为测试的一部分插入)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2013-12-22
    相关资源
    最近更新 更多