hive 如何處理科學計數法

2021-07-03 12:13:08 字數 1606 閱讀 6056

說明:hive中int , float , double這些數值型別在儲存大額度數字時,在前端展現上總是使用科學計數法來表示,

這樣搞的挺煩。舉例說明

樣例資料:

select lte_drop_rate from t_table limit 10;

輸出結果:

5.0e-4

7.1e-4

5.41e-4

......

處理方案:

select 

(case

--處理非科學計數法表示的字串

when length(regexp_extract(lte_drop_rate,'([0-9]+\\.)([0-9]+)(e-*[0-9]+)',2))=0

then lte_drop_rate

--處理整數

when length(regexp_extract(lte_drop_rate,'([0-9]+\\.)([0-9]+)(e[0-9]+)',2))<=cast(regexp_extract(lte_drop_rate,'(e)([0-9]+)',2) as int)

then rpad(regexp_replace(regexp_extract(lte_drop_rate,'([^e]+)',1),'\\.',''),cast(regexp_extract(lte_drop_rate,'(e)([0-9]+)',2) as int)+1,'0')

--處理小數

when length(regexp_extract(lte_drop_rate,'([0-9]+\\.)([0-9]+)(e[0-9]+)',2))>cast(regexp_extract(lte_drop_rate,'(e)([0-9]+)',2) as int)

then concat(substr(regexp_replace(regexp_extract(lte_drop_rate,'([^e]+)',1),'\\.',''),1,cast(regexp_extract(lte_drop_rate,'(e)([0-9]+)',2) as int)+1),'\.',

substr(regexp_replace(regexp_extract(lte_drop_rate,'([^e]+)',1),'\\.',''),cast(regexp_extract(lte_drop_rate,'(e)([0-9]+)',2) as int)+2))

--處理類似「3.4e-6」這種字串

when lte_drop_rate regexp 'e-'

then concat('0.',repeat('0',cast(regexp_extract(lte_drop_rate,'(e)(-)([0-9]+)',3) as int)-1),regexp_replace(regexp_extract(lte_drop_rate,'(.+)(e)',1),'\\.',''))

else lte_drop_rate

end)

from t_table limit 10

輸出結果:

0.00050

0.00051

0.0010

。。。

HIVE科學計數法

hive中數值型別可以和和字串型別string運算,其中字串為純數字型別,都轉為了浮點型別double.若字串不為純數字型別,計算結果則為null.1 數值和數值 int 2 數值和數值型字元 3 數值和非純數字 union all中的子查詢要求相同的列數,對應字段型別相同或可以隱式轉化為同一種型別...

hive轉換科學計數法

hive中的科學計數法如何轉換回數字,搜了半天終於找到了一篇好文章,這裡記錄轉換 為自己日後參考。自 case 處理非科學計數法表示的字串 when length regexp extract 字串 0 9 0 9 e 0 9 2 0 then 字串 處理整數 when length regexp ...

execl php 科學計數法處理 關於PHP

php的九大全域性變數 例如 var dump globals 執行得 array 5 post array 0 cookie array 0 files array 0 globals array 5 post array 0 cookie array 0 files array 0 global...