在 PostgreSQL 中截断小数点前的值

Truncating a value before a decimal in PostgreSQL

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

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

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

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

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

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;