hive科学计数法转字符串

本文详细介绍了一种在Hive中将科学计数法表示的数据转换为标准字符串格式的方法,适用于int、double和float等数值类型,通过使用复杂的正则表达式和字符串处理函数,确保数据准确无误地转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

科学计数法转字符串

20191014


有时需要将表里的int, double, float转为string类型的(主要的是int),但有时int在hive里是用科学计数法来表示的,不能直接转string.参考文章【链接】.

  • 对于int类型,可以直接先转为bigint再转为stringcast(cast(intnum bigint) as string)

  • 对于一般类型可用下面的语句(不是我写的0-0,但可以顺便学习了下hive里的正则表达式,记录一下)

--处理非科学计数法表示的字符串
--变量 :${hivevar:bignum}
select 
case
--处理非科学计数法表示的字符串
when length(regexp_extract('${hivevar:bignum}','([0-9]+\\.)([0-9]+)(E-*[0-9]+)',2)) = 0
then '${hivevar:bignum}'
--处理整数
when length(regexp_extract('${hivevar:bignum}','([0-9]+\\.)([0-9]+)(E[0-9]+)',2)) <= cast(regexp_extract('${hivevar:bignum}','(E)([0-9]+)',2) as int)
then rpad(regexp_replace(regexp_extract('${hivevar:bignum}','([^E]+)',1),'\\.',''),cast(regexp_extract('${hivevar:bignum}','(E)([0-9]+)',2) as int)+1,'0')
--处理小数
when length(regexp_extract('${hivevar:bignum}','([0-9]+\\.)([0-9]+)(E[0-9]+)',2)) > cast(regexp_extract('${hivevar:bignum}','(E)([0-9]+)',2) as int)
then concat(substr(regexp_replace(regexp_extract('${hivevar:bignum}','([^E]+)',1),'\\.',''),1,cast(regexp_extract('${hivevar:bignum}','(E)([0-9]+)',2) as int)+1),'\.',
substr(regexp_replace(regexp_extract('${hivevar:bignum}','([^E]+)',1),'\\.',''),cast(regexp_extract('${hivevar:bignum}','(E)([0-9]+)',2) as int)+2))
--纯小数,处理类似“3.4E-6”这种字符串
when ${hivevar:bignum} regexp 'E-'
then concat('0.',repeat('0',cast(regexp_extract('${hivevar:bignum}','(E)(-)([0-9]+)',3) as int)-1),regexp_replace(regexp_extract('${hivevar:bignum}','(.+)(E)',1),'\\.',''))
else '${hivevar:bignum}'
end

参考

参考链接.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值