hive轉換科學計數法

2021-09-02 21:41:14 字數 2349 閱讀 4122

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 處理方案...