按字面量除后Redshift中的小数位数

时间:2019-03-12 01:37:52

标签: floating-point amazon-redshift

试图了解这种行为

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

select x / y from tab将根据the rules in Redshift docs返回0.3333 ....至小数点后11位。

我不明白的是:如果我用转换为相同类型(x / 3::decimal(10,0))的文字除以,我将得到恰好4个小数位(0.3333

除了使用float首先将商写到表中或更差的方法之外,如何对结果的精度/小数位数进行更细粒度的控制?

1 个答案:

答案 0 :(得分: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可以大大提高精度。

如果需要设置输出精度,则可以像我的第四个示例((x/ (select 3)::decimal))::decimal(10,6)

那样进行。