Усечение значения перед десятичным знаком в PostgreSQL

Я перемещаю данные из таблицы оракула в Postgres с помощью dblink, а в новой структуре таблицы Postgres я добавил точность к числовому столбцу, который был без точности в Oracle, теперь при перемещении данных я могу обрезать десятичные значения, чтобы они соответствовали масштабу, однако я изо всех сил пытаюсь найти способ усечь значение до десятичной точки, если оно не соответствует точности.

для настройки масштаба я использую следующую команду:

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

Итак, в этом случае, если значение после запятой больше 3 цифр, оно будет усечено до 3 цифр, однако я хочу, чтобы точность (до десятичной запятой) была больше 4, чем она также должна быть усечена до 4 цифры, я не возражаю, если при этом изменится значение нескольких строк.


person Sujeet Chaurasia    schedule 08.07.2019    source источник
comment
Мне непонятно, чего вы пытаетесь достичь. Если исходное значение, например. 12345.678 что должно получиться в результате этой операции?   -  person a_horse_with_no_name    schedule 08.07.2019
comment
в этом случае, если значение равно 12345,678, поэтому я хочу, чтобы оно было 1234,567 или 1234,678, оба значения мне подходят.   -  person Sujeet Chaurasia    schedule 08.07.2019
comment
Это не имеет никакого смысла для меня. Я согласен с Лоренцем, что установка этих значений на null имеет гораздо больше смысла.   -  person a_horse_with_no_name    schedule 08.07.2019


Ответы (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;
person Laurenz Albe    schedule 08.07.2019