hive正则表达式regexp_extract的第三个参数index

表格的原始数据如下:

a
152天内有67天无通话记录
71天内有58天无通话记录
154天内有8天无通话记录
178天内有76天无通话记录
NULL
159天内有69天无通话记录
手机关机时间从未超过1天
171天内有63天无通话记录
163天内有90天无通话记录
160天内有35天无通话记录

现在想计算其中无通话记录的天数的占比,又不想在代码中使用中文(避免编码问题),该怎么做呢?

当然是正则表达式了!

hive的正则表达式函数是regexp_extract,具有三个参数:
regexp_extract(string subject, string pattern, int index)
前两个都好理解,第三个是什么意思呢?
不如试试看:

select
    case
        when regexp_extract(a,'([0-9]+)([^0-9]+)([0-9]+)',3)!=''
            then regexp_extract(a,'([0-9]+)([^0-9]+)([0-9]+)',3)/regexp_extract(a,'([0-9]+)([^0-9]+)([0-9]+)',1)
        when a is null then -9999990
        else 0 end as rate,
    regexp_extract(a,'([0-9]+)([^0-9]+)([0-9]+)',0),
    regexp_extract(a,'([0-9]+)([^0-9]+)([0-9]+)',1),
    regexp_extract(a,'([0-9]+)([^0-9]+)([0-9]+)',2),
    regexp_extract(a,'([0-9]+)([^0-9]+)([0-9]+)',3),
    a

from table 
rate_c0_c1_c2_c3a
0.440789474152天内有67152天内有67152天内有67天无通话记录
0.81690140871天内有5871天内有5871天内有58天无通话记录
0.051948052154天内有8154天内有8154天内有8天无通话记录
0.426966292178天内有76178天内有76178天内有76天无通话记录
-9999990NULLNULLNULLNULLNULL
0.433962264159天内有69159天内有69159天内有69天无通话记录
0手机关机时间从未超过1天
0.368421053171天内有63171天内有63171天内有63天无通话记录
0.552147239163天内有90163天内有90163天内有90天无通话记录
0.21875160天内有35160天内有35160天内有35天无通话记录

可以看到,第三个参数index就是返回第几个括号里的值,而当index=0则是返回整个字符串,也就是说,第一个括号里的字符串是没法通过指定index来返回的

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值