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 ...
随机推荐
- HTTP method GET is not supported by this URL
Servlet eroor:HTTP method GET is not supported by this URL 错误提示: type: Status report message: HTTP m ...
- MFC如何显示位图
1. 资源文件中加载 bmp 2.1. 静态加载图片 在属性下设置为如下即可 2.2 动态加载图片 其中要在控件中添加CStatic变量,并且属性设置为如下 并且在按钮控件中加入 如下代码 void ...
- Java 之 Map 接口
一.Map 接口概述 java.util.Map 接口专门用来存放键值对这种对象关系的对象. 下面比较一下 Collection 与 Map 的区别: Collection 中的集合,元素是孤立存在的 ...
- laravel 框架 数据库迁徙时SQLSTATE[420000]错误
问题: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key wa s too long; max key le ...
- 从零开始配置一个简单的webpack打包
一.基础配置 1.创建一个名为demo-webpack的文件夹(名称随意) 2.初始化一个package.json文件 //在cmd窗口中使用以下命令快速创建 npm init -y 3.安装webp ...
- Redis 学习-Redis Sentinel
一.启动服务 1. 配置文件 sentinel.conf daemonize yes # 是否守护进程启动 pidfile "/var/run/redis-sentinel-26379.pi ...
- 9.jsonp的实现原理
1. 由于浏览器的安全性限制,不允许AJAX访问 协议不同.域名不同.端口号不同的数据接口,浏览器认为这种访问不安全:2. 以通过动态创建script标签的形式,把script标签的src属性,指向数 ...
- python3使用ConfigParser从配置文件中获取列表
使用python3使用ConfigParser从配置文件中获取列表 testConfig.py #!/usr/bin/env python # coding=utf- __author__ = 'St ...
- 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)
2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...
- Python程序打包工具PyInstaller
Python程序执行 py文件:直接提供源码,需要使用者自行安装Python并且安装依赖的各种库 pyc文件:pyc文件是Python解释器可以识别的二进制码,是跨平台的,需要使用者安装相应版本的Py ...