0

我正在使用 dblink 将数据从 oracle 表移动到 Postgres,并且在 Postgres 的新表结构中,我已经为 Oracle 中没有精度的数字列添加了精度,现在在移动数据时我能够截断十进制值以匹配比例,但是,如果它与精度不匹配,我正在努力寻找一种方法来截断小数点之前的值。

调整比例我使用以下命令:

insert into Postgres.test 
select id, width::numeric(7,3) 
from oracle.test;

因此,在这种情况下,如果小数点后的值大于 3 位,它会将其截断为 3 位,但是,如果精度(小数点前)大于 4,我希望它也应该被截断为4 位数,我不介意这样做会改变几行的值。

4

1 回答 1

1

您可以使用“左截断”小数点前的数字

insert into Postgres.test 
select id, (width % 10000)::numeric(7,3) 
from oracle.test;

但我认为这样做没有多大意义。使用 NULL 可能比使用错误值更好:

insert into Postgres.test 
select id, CASE WHEN width >= 10000 THEN NULL ELSE width::numeric(7,3) END
from oracle.test;
于 2019-07-08T07:04:55.570 回答