Oracle中可以代替like进行模糊查询的方法instr(更高效)

发布时间 2023-10-18 10:51:36作者: bellin124

1. instr()函数说明:

instr(sourceString,destString,start,appearPosition)     
对应参数描述: instr('源字符串' , '目标字符串' ,'开始位置','第几次出现'),返回目标字符串在源字符串中的位置。后面两个参数可要可不要。

2. instr()与like比较:
instr函数也有三种情况:
a. instr(字段,'关键字') > 0    相当于 字段like '%关键字%':        表示在字符串中包含‘关键字’
b. instr(字段,'关键字') = 1    相当于 字段like '关键字%'            表示以‘关键字’开头的字符串
c. instr(字段,'关键字') = 0    相当于 字段not like '%关键字%'  表示在字符串中不包含‘关键字’

eg:

select * from temp5) res where res.name like '%zhang%';

select * from temp5) res where instr(res.name,'zhang') > 0;

3. instr特殊用法:
select id, name from users where instr('a, b', id) > 0;
 --等价于
select id, name from users where id = a or id = b;
 --等价于
select id, name from users where id in (a, b);

4. instr()与like效率对比:

结论:instr查询速度确实比like快一些,但是看执行计划的话,instr却比like耗时一点。在进行模糊查询的时候,能用instr的话就尽量用instr,毕竟数据量大的时候还是有一点优势的。

文章来源:Oracle中可以代替like进行模糊查询的方法instr(更高效) - Zeroassetsor - 博客园 (cnblogs.com)