【问题标题】:Alter Numeric Column to Lower Precision更改数值列以降低精度
【发布时间】:2020-03-06 19:12:41
【问题描述】:

我的 postgres 数据库架构的表中有一个数字列,它的精度为 n

我需要将此列更新为较低的精度,称之为m

所以m n.

当我运行命令时:

ALTER TABLE my_table
ALTER COLUMN my_column
TYPE numeric(m, 2)

我收到以下错误:numeric field overflow

我理解这是因为我在表中存储的值的精度大于m(我希望新的精度为)。有什么办法可以告诉 postgres 更改精度并忽略丢失的精度? 例如。

如果 n = 20 且 m = 15 我在my_column 中有一个值,即 99999999999999999,如果我没记错的话,这个精度是 17,我可以告诉 postgres 在我更改表/列时忽略丢失的精度并将新值保存为 999999999999999 吗?

【问题讨论】:

  • 小数点左边的数字不是这样的。

标签: sql postgresql


【解决方案1】:

您可以使用using 为转换提供表达式:

alter table t alter column col
    type numeric(2) using (case when col >= 100 then 99 else col end);

Here 是一个 dbfiddle。

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2011-07-16
    • 2022-11-02
    • 2015-05-15
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多