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 '#'
方法一:使用模糊查询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 '#'
相关文章推荐
- hive的like和rlike的区别
- HIVE中LIKE和RLIKE的区别
- hive的like和rlike区别
- hive like与rlike的区别
- 使用java连接hive,并执行hive语句详解
- Hive中LIKE查询使用通配符'%'的一个BUG--当转义符'\'遇到通配符'%'或'_'
- PHP isset()与empty()的使用区别详解
- 基于Sizeof与Strlen的区别以及联系的使用详解
- [转载]PHP isset()与empty()的使用区别详解
- PHP isset()与empty()的使用区别详解
- lib 和 dll 的区别、生成以及使用详解
- PHP isset()与empty()的使用区别详解
- Hive中LIKE查询使用通配符'%'的一个BUG--当转义符'\'遇到通配符'%'或'_'
- lib 和 dll 的区别、生成以及使用详解
- MySql like模糊查询使用详解
- 使用java连接hive,并执行hive语句详解
- PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- php中const与define的使用区别 详解
- lib 和 dll 的区别、生成以及使用详解