【问题标题】: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 类型,可以比FLOAT 或DOUBLE 类型更精确地表示数字。
DECIMAL 类型的 precision 和 scale 允许的最大值均为 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() 函数。