Bootstrap

数据库中字符串匹配函数like、rlike、instr、regexp_extract

instr

简介

MySQL、hive中函数,instr(str,substr,position,occurrence)

其中str代表从哪个字符串中搜索,substr代表搜索哪个子字符串,返回值为子字符串在原字符串中的位置,若不存在则返回0;position为开始计数位置,occurrence代表输出第几次出现的子字符串。如instr('helloworld','o',1,2),则代表从左往右数第1位开始计算,'helloworld'字符串中第2次出现子字符串'o'的位置

应用:

select * from test where instr(index,'o') > 0;

like

简介

MySQL、hive中函数,使用通配符进行匹配,常用的通配符有'%','_',其中'%'可以匹配0到多个字符,而'_'只能匹配一个字符。like函数默认不区分大小写,若需要区分则在like后加上binary。否定形式为A NOT LIKE B

用法

select * from test where index like '%o%';

rlike

hive中函数,使用正则进行匹配,否定形式为A NOT RLIKE B

select "11111112222123333" rlike  "^12"  

regexp_extract

简介

regexp_extract(string subject, string pattern, int index) ,将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

index中,0表示把整个正则表达式对应的结果全部返回,n表示返回正则表达式中第n个() 对应的结果。

总结

  1. like是从头开始匹配,是全部匹配,而rlike可以从任意部位开始匹配;
  2. like的匹配法则是通配符,而rlike是正则表达式;
  3. instr是一个函数,可以建立函数索引,如果过滤的条件有索引,那么instr就可以提高性能;
  4. like运算符要对字段数据进行逐一扫描匹配,实际执行的效率是较差的,哪怕该字段已经建有索引(a% 这种方式会用到索引)。当数据量较大时,要尽可能的减少like 运算符的使用,也没有太多优化的余地,建议使用instr函数;
  5.  like查询时,以'%'开头,列所加的索引是不起作用的。
;