我正在使用dblink的帮助将数据从oracle表移动到Postgres,在Postgres的新表结构中,我将精度添加到了Oracle中没有精度的数字列中,现在在移动数据时能够截断十进制值以匹配小数位,但是,如果它与精度不匹配,我正在努力寻找一种方法来截断小数点前的值。
要调整比例,我正在使用以下命令:
insert into Postgres.test
select id, width::numeric(7,3)
from oracle.test;
因此,在这种情况下,如果小数点后的值大于3位,它将截断为3位,但是,我想如果精度(小数点前)大于4,则它也应该得到截断为4位数字,我不介意这样更改几行的值。
答案 0 :(得分: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;