【问题标题】:Truncating a value before a decimal in PostgreSQL在 PostgreSQL 中截断小数点前的值
【发布时间】:2019-11-17 15:48:55
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我不清楚你想要达到什么目的。如果原始值是例如12345.678该操作的结果应该是什么?
  • 在这种情况下,如果值为 12345.678,那么我希望它是 1234.567 或 1234.678,这两个值都适合我
  • 这对我来说毫无意义。我同意 Laurenz 的观点,将这些值设置为 null 更有意义。

标签: postgresql oracle-fdw


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多