在cloudera的《 Impala 指南》中(https://www.cloudera.com/documentation/enterprise/5-8-x/topics/impala_conversion_functions.html)下面的示例演示了如何使用typeof()函数检查数值表达式的返回数据类型:
+--------------------------+
| typeof(5.30001 / 2342.1) |
+--------------------------+
| DECIMAL(13,11) |
+--------------------------+
当我这样做时:
select typeof(5.30001),typeof(2342.1),typeof(5.30001 / 2342.1);
它给的是这样的东西
DECIMAL(6,5) DECIMAL(5,1) DECIMAL(13,11)
我的意思是前两个很明显,但我不知道为什么第三个的数据类型是这样的。返回的数据类型可以从数值表达式本身来确定吗?另外,对于我表示为 decimal(13,5)/decimal(25,4)
(例如)有没有办法确定返回的数据类型应该是什么?谢谢。
1条答案
按热度按时间au9on6nz1#
这确实有点模糊。下面是做算术十进制类型转换的相关代码。
因此,5.30001为精度6和比例尺5,2342.1为精度5和比例尺1。我们有s1=5和p2=5。输出刻度为s1+p2+1==11,精度为6-5+1+11==13。在评论链接中可以更好地解释这些规则。