您的位置:首页 > 其它

Hive中rlike,like,not like区别与使用详解

2018-03-05 22:56 531 查看
业务需求:使用hive从表中查询dataforjy字段的记录后5位包含#的有哪些?
方法一:使用模糊查询like,逐一匹配
 Like表示模糊查询(是否包含),like后面的字符串不是正则表达式,而是通配符。像mysql中的"like",%代表任意数量个字符,_代表一个填充字符。但是建议使用高级函数"instr"效率更高。
        Select dataforjy  from  fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix
        where     dataforjy   like '%#____'
                   or dataforjy like  '%_#___'
                   or dataforjy like  '%__#__'
                   or dataforjy like  '%___#_'
                   or dataforjy like  '%____#'
方法二:(通过截取后5位,使用relike查询包含#的记录)     Rlike功能和like一致,只是后面内容是正则表达式,正则的写法与java一样。需要转义,例如'\m'需要使用'\\m'。如果like想用正则表达式,则需要替换用rlike.              Select  dataforjy
            from fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix

            where substr(dataforjy,length(dataforjy)-4)  rlike '#'
 注,substr后5位的取法,是dataforjy-4,而不是dataforjy-5。其实dataforjylike ‘%#%’和dataforjyrlike ‘#’效果一样,都是对含#号的匹配。但是上面两种如果dataforjy字段中存在长度小于5的字段,则统计结果都会不准。
方法三:通过给不足字段进行长度补充,让其长度统一
        select  * from fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix
        where substr(lpad(paystat24month,24,'9'),-5) rlike '#'
RLIKE的其他使用,比如: hive> select 1 from lxw_dual where 'footbar’ rlike'^f.*r$’;
> 1
注意:判断一个字符串是否全为数字:
hive> select 1 from lxw_dual where '123456' rlike'^\\d+$';
> 1
hive> select 1 from lxw_dual where '123456aa' rlike'^\\d+$';Not like表示不包含的匹配,和like相反,但是用法不是Anot like B,而是not  A like B .
        hive>   select  not 'abcde' like '%c%e'      from     fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix
        hive > false 

同理NOT RLIKE 的使用,也是NOT  A  RLIKE  B
      select  PAYSTAT24MONTH
      from   fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix
      where  not   substr(PAYSTAT24MONTH,length(PAYSTAT24MONTH)-4) rlike '#'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: