Oracle中可以代替like进行模糊查询的方法instr(更高效)
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)