PostgreSQL - 改变数字的精度?

Posted

技术标签:

【中文标题】PostgreSQL - 改变数字的精度?【英文标题】:PostgreSQL - change precision of numeric? 【发布时间】:2014-02-12 11:16:26 【问题描述】:

我试着像这样改变精度:

ALTER Table account_invoice ALTER amount_total SET NUMERIC(5);

但我得到语法错误,所以我显然做错了什么。在 PostgreSQL 中改变数值精度的正确语法是什么?

【问题讨论】:

alter table account_invoice alter column amount_type type decimal(5,0); ?或像这样ALTER TABLE acc_inv MODIFY amount_total NUMERIC(5,0); ? @VijaykumarHadalgi 将其发布为答案 我在猜测! @ClodoaldoNeto 我发布为答案! 记录了正确的语法:postgresql.org/docs/current/static/sql-altertable.html 【参考方案1】:

试试这个:

ALTER Table account_invoice ALTER COLUMN amount_total TYPE DECIMAL(10,5);

DECIMAL(X, Y) -> X 代表全长,Y 代表数字的精度。

【讨论】:

这里的 PostgreSQL 中的术语有点令人困惑:postgresql.org/docs/9.1/static/datatype-numeric.html。因为这里的精度称为全长数字。还有为什么 DECIMAL 不是 NUMERIC? 它们在 postgresql 中没有什么不同,您也可以使用数字。确实可能更好。 无需将数据类型更改为 DECIMAL。这也可以通过 Maike Mota 回答的数据类型 NUMERIC 来完成。 确认 Andrius 的评论,我相信此答案中的 X、Y 已切换。 X 是精度,Y 是比例 - postgresql.org/docs/14/datatype-numeric.html#id-1.5.7.9.7.4(链接到确切的段落)【参考方案2】:

你可以用这个:

ALTER Table account_invoice ALTER amount_total SET DATA TYPE NUMERIC(5,Y);

其中 Y 是您所需的精度水平。

【讨论】:

仅供参考:5 是精度,Y 是比例 当我说 "precision" 我想指的是 小数位数时,我可以看到我对 Y 值的评论可能导致的混乱b>,POSTGRE 文档将 precision 称为数字可以包含的总位数,将 scale 称为保留为小数的总位数(AKA. decimal地方)。感谢您引起我的注意! NUMERIC(precision, scale). 数字的 scale 是小数部分的小数位数,在小数部分的右侧小数点。数值的precision是整数中有效位数的总数,即小数点两边的位数。所以数字 23.5141 的精度为 6,小数位数为 4。整数可以被视为小数位数为零。 source【参考方案3】:

你需要在列名后面加上TYPE关键字,而不是SET

ALTER Table account_invoice ALTER amount_total TYPE NUMERIC(5);

查看文档:ALTER TABLE

Example on SQL Fiddle

【讨论】:

以上是关于PostgreSQL - 改变数字的精度?的主要内容,如果未能解决你的问题,请参考以下文章

将 oracle 转换为 PostgreSQL 时出现数字溢出

改变数字精度

Postgres 中数字数据类型的精度和小数位数是多少?

Postgresql数据类型

ProgrammingError:列“X”是双精度类型,但表达式是数字[]类型

PostgreSQL数据类型(中文手册)