hive中的科學計數法如何轉換回數字,搜了半天終於找到了一篇好文章,這裡記錄轉換**為自己日後參考。**自:
case
--處理非科學計數法表示的字串
when length(regexp_extract('字串','([0-9]+\\.)([0-9]+)(e-*[0-9]+)',2))=0
then '字串'
--處理整數
when length(regexp_extract('字串','([0-9]+\\.)([0-9]+)(e[0-9]+)',2))<=cast(regexp_extract('字串','(e)([0-9]+)',2) as int)
then rpad(regexp_replace(regexp_extract('字串','([^e]+)',1),'\\.',''),cast(regexp_extract('字串','(e)([0-9]+)',2) as int)+1,'0')
--處理小數
when length(regexp_extract('字串','([0-9]+\\.)([0-9]+)(e[0-9]+)',2))>cast(regexp_extract('字串','(e)([0-9]+)',2) as int)
then concat(substr(regexp_replace(regexp_extract('字串','([^e]+)',1),'\\.',''),1,cast(regexp_extract('字串','(e)([0-9]+)',2) as int)+1),'\.',
substr(regexp_replace(regexp_extract('字串','([^e]+)',1),'\\.',''),cast(regexp_extract('字串','(e)([0-9]+)',2) as int)+2))
--處理類似「3.4e-6」這種字串
when '字串' regexp 'e-'
then concat('0.',repeat('0',cast(regexp_extract('字串','(e)(-)([0-9]+)',3) as int)-1),regexp_replace(regexp_extract('字串','(.+)(e)',1),'\\.',''))
else '字串'
end例如要處理「1.5602200465e8」這樣乙個字串:
select
case
when length(regexp_extract('1.5602200465e8','([0-9]+\\.)([0-9]+)(e-*[0-9]+)',2))=0 then '1.5602200465e8'
when length(regexp_extract('1.5602200465e8','([0-9]+\\.)([0-9]+)(e[0-9]+)',2))<=cast(regexp_extract('1.5602200465e8','(e)([0-9]+)',2) as int)
then rpad(regexp_replace(regexp_extract('1.5602200465e8','([^e]+)',1),'\\.',''),cast(regexp_extract('1.5602200465e8','(e)([0-9]+)',2) as int)+1,'0')
when length(regexp_extract('1.5602200465e8','([0-9]+\\.)([0-9]+)(e[0-9]+)',2))>cast(regexp_extract('1.5602200465e8','(e)([0-9]+)',2) as int)
then concat(substr(regexp_replace(regexp_extract('1.5602200465e8','([^e]+)',1),'\\.',''),1,cast(regexp_extract('1.5602200465e8','(e)([0-9]+)',2) as int)+1),'\.',
substr(regexp_replace(regexp_extract('1.5602200465e8','([^e]+)',1),'\\.',''),cast(regexp_extract('1.5602200465e8','(e)([0-9]+)',2) as int)+2))
when '1.5602200465e8' regexp 'e-'
then concat('0.',repeat('0',cast(regexp_extract('1.5602200465e8','(e)(-)([0-9]+)',3) as int)-1),regexp_replace(regexp_extract('1.5602200465e8','(.+)(e)',1),'\\.',''))
else '1.5602200465e8'
endfrom dual;
結果:156022004.65
HIVE科學計數法
hive中數值型別可以和和字串型別string運算,其中字串為純數字型別,都轉為了浮點型別double.若字串不為純數字型別,計算結果則為null.1 數值和數值 int 2 數值和數值型字元 3 數值和非純數字 union all中的子查詢要求相同的列數,對應字段型別相同或可以隱式轉化為同一種型別...
科學計數法
在做專案時發現乙個比較頭痛的問題,輸入法輸入金額android inputtype numberdecimal 控制項是可以輸入000.123的,為了獲取正確的輸入值可以使用下面方法,當輸入的資料很長時也不會被用科學計數法顯示 string str 000.123 bigdecimal bigdec...
hive 如何處理科學計數法
說明 hive中int float double這些數值型別在儲存大額度數字時,在前端展現上總是使用科學計數法來表示,這樣搞的挺煩。舉例說明 樣例資料 select lte drop rate from t table limit 10 輸出結果 5.0e 4 7.1e 4 5.41e 4 處理方案...