instr和like的使用区别
1、instr函数
instr函数是一个字符串处理函数,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0。
instr函数定义如下:
- /*
- * 返回子字符串在源字符串中的位置(字符串位置从1开始,而不是从0开始)
- * @param str 源字符串
- * @param substr 子字符串
- * @param position 检索位置,可省略(默认为1),参数为正时,从左向右检索,参数为负时,从右向左检索
- * @param occurrence 检索子串出现次数(即子串在源串第几次出现),可省略(默认为1),值只能为正整数,否则会报错
- * @return 返回子字符串在源字符串中出现的位置(没找到返回0)
- */
- instr(str, substr, position, occurrence);
例如:
- SELECT INSTR('hello world', 'l') FROM DUAL; --结果:3
- SELECT INSTR('hello world', 'l', 5) FROM DUAL; --结果:10 (从左向右第5位开始检索'l'在'hello world'中出现的位置)
- SELECT INSTR('hello world', 'l', -1) FROM DUAL; --结果:10 (从右向左第1位开始检索'l'在'hello world'中出现的位置)
- SELECT INSTR('hello world', 'l', 2, 2) FROM DUAL; --结果:4 (从左向右第2位开始检索'l'在'hello world'中第2次出现的位置)
- SELECT INSTR('hello world', 'l', -3, 3) FROM DUAL; --结果:0 (从右向左第3位开始检索'l'在'hello world'中第3次出现的位置)
2、like关键字
like关键字也可称为通配符,在SQL中用于模糊查询。可以使用“%”和“_”通配符,其中“%”代表0个或多个字符,“_”代表1个字符。
例如:
- SELECT * FROM STUDENTTAB WHERE STUNAME LIKE '%张%'; --在STUDENTTAB表中查询STUNAME中含有字符“张”的学员
- SELECT * FROM STUDENTTAB WHERE STUNAME LIKE '张_'; --在STUDENTTAB表中查询STUNAME中以“张”开头,名字长度为2的学员(即“张三”、“张四”,而不会检测出“张三三”)
3、instr和like的使用:
- SELECT * FROM STUDENTTAB WHERE STUNAME LIKE '%张%';
- 就相当于
- SELECT * FROM STUDENTTAB WHERE INSTR(STUNAME, '张') > 0;
- SELECT * FROM STUDENTTAB WHERE STUNAME NOT LIKE '%张%';
- 就相当于
- SELECT * FROM STUDENTTAB WHERE INSTR(STUNAME, '张') = 0;
4、总结
<1> instr>0 和like、instr=0 和not like 一般来说查询的结果相同(不考虑特殊字符)
<2> instr是一个函数,可以建立函数索引,如果过滤的条件有索引,那么instr就可以提高性能。
<3> like查询时,以'%'开头,列所加的索引是不起作用的。
<4> 在没有索引的前提下,当数据量比较大时,instr要比like效率高。
instr和like的使用区别的更多相关文章
- SQL中instr和like的使用区别
1.instr函数 instr函数是一个字符串处理函数,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0. instr函数定义如下: /* * 返回子 ...
- Oracle instr函数与SqlServer charindex的区别
INSTR(C1,C2[,I[,J]]) [功能]在一个字符串中搜索指定的字符,返回发现指定的字符的位置; [说明]多字节符(汉字.全角符等),按1个字符计算 [参数] C1 被搜索的字符串 ...
- instrrev 和instr 区别vb
Private Sub Form_click() Dim temp As String temp = "c:\window\system" Print Mid(temp, InSt ...
- [转]ORACLE中Like与Instr模糊查询性能大比拼
instr(title,'手册')>0 相当于 title like '%手册%' instr(title,'手册')=1 相当于 title like '手册%' instr(titl ...
- Oracle date 和 timestamp 区别
1.DATE数据类型 这个数据类型我们实在是太熟悉了,当我们需要表示日期和时间的话都会想到date类型.它可以存储月,年,日,世纪,时,分和秒.它典型地用来表示什么时候事情已经发生或将要发生. ...
- having 子句与where区别
having 子句,条件子句 与 where 功能.用法相同,执行时机不同. where 在开始时执行检测数据,对原数据进行过滤. having 对筛选出的结果再次进行过滤. having 字段必须是 ...
- PLSQL_基础系列08_操作符标LPAD / TRUNC / DECODE / TRIM / INSTR(案例)
2014-12-09 Created By BaoXinjian
- Oracle/Mysql/SqlServer函数区别
mysql日期和时间格式转换 Linux scp 使用详解 Oracle/Mysql/SqlServer函数区别 2011-07-01 12:34:36| 分类: Mysql技术 | 标签:mys ...
- Mysql和Oracle的一些语法区别
作为一个有追求的程序猿,当然要不断的学习,巴拉巴拉巴拉...好了,贴一个网址给大家,哈哈 MySQL与Oracle 差异比较:http://www.cnblogs.com/HondaHsu/p/364 ...
随机推荐
- MSSql-SP_who分析数据库性能
https://blog.csdn.net/xiaoxu0123/article/details/5757640 https://www.cnblogs.com/kelelipeng/p/104959 ...
- python运行报错:cannot import name 'InteractiveConsole'
ModuleNotFoundError: No module named '_pydevd_bundle.pydevd_cython' ImportError: cannot import name ...
- 二级菜单被banner遮住的解决方法
原因:z-index的问题 解决:在导航box加 position: relative; z-index: 4; 比banner 大就可以.然后在一级导航的 li 设置 相对定位 positio ...
- Redis面试题记录--缓存双写情况下导致数据不一致问题
转载自:https://blog.csdn.net/lzhcoder/article/details/79469123 https://blog.csdn.net/u013374645/article ...
- 3.Redis数据类型
Redis的五大数据类型: 1.string(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value. string类型是二进制安 ...
- dubbo框架梳理
Dubbo分层 Dubbo框架运行主要分如下九层: 配置层:config 服务代理层:proxy 注册中心层:registry 路由层:cluster 监控层:monitor 远程调用层:protoc ...
- Codeforces Round #590 (Div. 3) 万恶的自己WAC
C题:一道简单的C题卡了半天,我太菜了 题意:给你一个n*2的矩阵,每个位置有一个数字,对应一种管道,要求通道可不可以从左上通到右下 由提议可以看出,1,2对应的是直管道,3,4,5,6对应弯管道,只 ...
- 从c到c++<四>
总结一下:内联函数实际上就是用inline修饰的函数,这些函数会在编译时由编译器来将代码展开,而不用像上面第二点提到的人工展开,它的使用场景:代码很短.使用频率高. 具体代码如下: 对于这两者实际上还 ...
- 保护你的Linux系统的九个老生常谈
在现在这个世道中,保障基于Linux的系统的安全是十分重要的.但是,你得知道怎么干.一个简单反恶意程序软件是远远不够的,你需要采取其它措施来协同工作.那么试试下面这些手段吧. 1. 使用SELinux ...
- spring实例化三:CglibSubclassingInstantiationStrategy
在SimpleInstantiationStrategy类中,留下了包含MethodOverride对象的bd对象定义未做实现,做了抽象.CglibSubclassingInstanti ...