說明: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...