Пытаюсь понять это поведение

 CREATE TABLE tab (x DECIMAL(10,0), y DECIMAL(10,0))
 INSERT INTO tab VALUES(1, 3)

select x / y from tab вернет 0,3333 .... с точностью до 11 знаков после запятой согласно правила в документации Redshift.

Я не понимаю: если я делю на литерал, приведенный к тому же типу (x / 3::decimal(10,0)), я получаю ровно 4 десятичных знака (0.3333)

Как я могу получить более детальный контроль над точностью / масштабом результата, помимо записи частного в таблицу или, что еще хуже, с помощью float?

0
wrschneider 12 Мар 2019 в 04:37

1 ответ

Лучший ответ

Используя ваш пример таблицы вкладок

select x / y,
       ((x/ 3::decimal)),
       ((x/ (select 3)::decimal)),
       ((x/ (select 3)::decimal))::decimal(10,6)
       from tab;

Возвращается

0,33333333333 0,3333 0,3333333333333333333 0,333333

В третьем примере вы видите, что замена 3 :: decimal на (выберите 3) :: decimal значительно повысила точность.

Если вам нужно установить точность вывода, вы можете сделать это, как в моем 4-м примере ((x/ (select 3)::decimal))::decimal(10,6)

2
Jon Scott 12 Мар 2019 в 07:53