科学计数法转字符串
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
参考
参考链接.