在蜂巢中将bigint转换为十进制(18,5)

时间:2019-12-18 08:25:17

标签: hadoop hive apache-spark-sql

我试图在蜂巢中将bigint转换为十进制(18,5),转换为十进制(18,5)后没有得到任何分数值。

让我们采用以下bigint值

99000
999000
499000
350000
344000000

转换为十进制(18,5)后,我期望像下面的

0.99000
9.99000
4.99000
3.50000
3440.00000

我正在尝试以下查询。

select col_a, cast(col_a as decimal(18,5)) from table;

从上面的查询中,我得到的输出与输入相同

99000
999000
499000
350000
344000000

此外,我尝试将输入除以10 ^ 5并转换为十进制(18,5)。

select col_a, cast(col_a/100000 as decimal(18,5)) from table;

以上查询返回分数值,但小数点后没有5位数字。

0.99
9.99
4.99
3.5
344000000

有人可以纠正我在这里遗失或做错的事情吗?

1 个答案:

答案 0 :(得分:0)

DECIMAL类型不允许大于列定义所隐含范围的值。

DECIMAL(5,0)列支持-99999至99999。

DECIMAL(M,D)列允许小数点左边最多M - D位数字。

例如DECIMAL(5,2)允许-999.99到999.99

并且不显示尾随零。如果需要保证可以显示它们,请使用字符串类型和rpad()函数在结尾处添加零或类似的符号。

如果数字不能转换为十进制,则返回NULL,例如以下转换返回NULL:

select cast(1234567890L as decimal(3,1))

不清楚您为什么期望cast a bigint to decimal(18,5)产生一些小数。强制转换不会除您的初始数字。