irpas技术客

hive中判断一个字符串是否包含另一个子串的四种方法,sql中也可用_牧码文_hive 字符串包含

大大的周 6479

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就必须带了


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #hive #字符串包含 #quoti #want #To #Touch #fishquot