hive中判断一个字符串是否包含另一个子串的四种方法
如果你有一个数据需求,需要从一个字段中,判断是否有一个字符串,你该怎么做
一、方法1:like和rlike
最能想到的方法,用like或者rlike
select"i want to touch fish"like("%fish%");
那么rlike和like有什么区别呢,
简而言之,rlike不用一些花里胡哨的,直接匹配就可以
select"i want to touch fish"rlike("%fish%");
如果换成这样
select"i want to touch fish"rlike("fish");
二、方法2:locate
先看一下这个方法hive给出的解释
返回第一次出现的位置索引
select locate("fish","i want to touch fish");
locate方法还有个强大的地方就是,可以给第三个参数,一个索引,那么在查找的时候就会从这个索引处开始查找
select locate("t","i want to touch fish");
就比如上面这个语句,如果未给出第三个参数,那么就是返回索引 6 的位置,如果第三个参数给出9,那么就会从索引9的位置开始
select locate("t","i want to touch fish",9);
三、instr
看一下hive怎么给出的参考
这个就和locate相似了,但是没有locate强大,它可以给出第一次出现的位置索引
select instr('i want to touch fish','fish');
instr()和locate()的区别在于,instr的字符串在前,子串在后;而locate的字符串在后,子串在前
四、regexp正则匹配
先看下hive是怎么给出的
其实这个用法和rlike的用法相似,直接匹配就行
select"i want to touch fish"regexp"fish";
会返回boolean类型的结果
这个比rlike方便的地方就是,regexp可以带括号,也可以不带,而rlike就必须带了
版权归原作者 牧码文 所有, 如有侵权,请联系我们删除。