【问题标题】:I want my data upto 6 decimal places in impala我希望我的数据在 impala 中保留小数点后 6 位
【发布时间】:2020-10-27 08:19:42
【问题描述】:

我在 impala 中有一个 double 类型的列 当我试图将其减少到小数位时 我收到了这个错误 ERROR: AnalysisException: No matching function with signature: truncate(DOUBLE, TINYINT)。 例如select truncate(cast(0.4893617021276596 as double),7);

欢迎任何解决方法

【问题讨论】:

    标签: sql database impala truncate


    【解决方案1】:

    你可以使用round():

    select round(col, 6)
    

    如果你真的想要截断,那么减去 0.0000005:

    select round(col - 0.0000005, 6)
    

    【讨论】:

      【解决方案2】:

      使用DECIMAL 类型,可以比FLOATDOUBLE 类型更精确地表示数字。

      DECIMAL 类型的 precisionscale 允许的最大值均为 38。

      Precision 是总位数,与小数点位置无关。

      Scale 是小数点后的位数。 要在不损失精度的情况下表示数字 8.54,您需要一个 DECIMAL 类型,精度至少为 3,小数位数至少为 2。

      示例: 注意DECIMAL(17,16)类型的意思是一共17位,小数点后有16位。

      DECIMAL(17,16) 3.1415926535897932

      您可以使用DECIMAL 输入ALTER 您的表,如下所示:

      ALTER TABLE my_table CHANGE field field DECIMAL(precision, scale);
      

      或者按照@Gordon Linoff 的建议,您可以使用round() 函数。

      【讨论】:

        猜你喜欢
        • 2018-10-28
        • 2010-11-20
        • 2020-09-11
        • 2022-10-12
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        • 2022-11-19
        • 2019-03-10
        相关资源
        最近更新 更多