zoukankan      html  css  js  c++  java
  • 科学计数法转字符串

    科学计数法转字符串

    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
    

    参考

    参考链接.

  • 相关阅读:
    4.22日日常记录
    ajax再接触
    一些小姿势
    打星功能
    悟透javascript读书笔记
    初接触eclipse和前后端调试问题 待续
    python实现后台员工管理系统
    python实现增删改查操作
    python实现6种方法打印九九乘法表
    python实现猜数字游戏
  • 原文地址:https://www.cnblogs.com/damahuhu/p/11675543.html
Copyright © 2011-2022 走看看