Oracle中的instr函数
最近修改某个条件,由原来输入一个数据修改为可以输入多个,如图所示:

在实现时用到了regexp_substr函数进行分割连接起来的数据,查询时还用到了instr函数进行判断,但出现了问题,当子库存输入‘23107G’时会将23107和23107G的两个子库存都查询出来,查找后发现是instr函数的问题,其中where子句中用到了(p_sub_code IS NULL OR instr(p_sub_code,moq.subinventory_code)>0)。
对于Instr函数,一般的用法是返回源字符串中目标子串的位置,语法:
instr(string, substring, startposition, occurrence),有四个参数
1.String:源字符串
2.Substring:目标字符串
3.Startposition:查找的起始位置,默认为1,注:字符串是从1开始。
4.occurrence:出现的次数
例1、SQL> select instr('oracle','or') position from dual;--从第一个位置开始搜索or出现的位置
POSITION
----------
1
例2、SQL> select instr('oracleor','or', 3) position from dual; --从第三个位置开始搜索or出现的位置
POSITION
----------
7
例3、SQL> select instr('oracleor','or', 1, 2) position from dual;--从第一个位置开始搜索or第二次出现的位置
POSITION
----------
7
例4、SQL> select instr('oracleor','or', -1, 1) position from dual;--从倒数第一个位置开始搜索or第一次出现的位置
POSITION
----------
7
例5、SQL> select instr('oracleor','or', -1, 2) position from dual;--从倒数第一个位置开始搜索or第2次出现的位置
POSITION
----------
1
oracle用instr代替like,可以节省效率,会出现那个错误的原因就是因为查询实际是模糊查询。
表中将近有100万数据,很多时候,我们要进行字符串匹配,在SQL语句中,我们通常使用like来达到我们搜索的目标。但经过实际测试发现,like的效率与instr函数差别相当大。下面是一些测试结果:
SQL> set timing on
SQL> select count(*) from t where instr(title,’oracle’)>0;
COUNT(*)
———-
5478
Elapsed: 00:00:11.04
SQL> select count(*) from t where title like ‘%oracle%’;
COUNT(*)
———-
5478
Elapsed: 00:00:31.47
SQL> select count(*) from t where instr(title,’oracle’)=0;
COUNT(*)
———-
994530
Elapsed: 00:00:11.31
SQL> select count(*) from t where title not like ‘%oracle%’;
COUNT(*)
———-
994530
注:
instr(title,'oracle’)>0 相当于like
instr(title,'oracle’)=0 相当于not like
注:里面的例子摘自于https://blog.csdn.net/hzhsan/article/details/9186637
Oracle中的instr函数的更多相关文章
- MySQL中的模糊查询 like 和 Oracle中的 instr() 函数有同样的查询效果
注:MySQL中的模糊查询 like 和 Oracle中的 instr() 函数有同样的查询效果: 如下所示: MySQL: select * from tableName where name li ...
- Oracle中的instr()函数 详解及应用
1)instr()函数的格式 (俗称:字符查找函数) 格式一:instr( string1, string2 ) / instr(源字符串, 目标字符串) 格式二:instr( strin ...
- Oracle中的instr()函数
一.instr()函数 1.语法:instr(sourceString,destString,start,appearPosition) sourceString代表源字符串; destString代 ...
- SQL中CHARINDEX()/INSTR()函数和SUBSTRING()/SUBSTR()函数
一.SQLServer中的CHARINDEX() 和ORACLE中的INSTR()函数 1.INSTR(C1,C2[,I[,J]]) [功能]在一个字符串中搜索指定的字符,返回发现指定的字符的位置; ...
- Oracle中的单行函数
Oracle中的单行函数 1 字符函数 UPPER()--将字符串转换为大写 SELECT UPPER('abc') FROM dual; LOWER()-将字符串转换为小写 SELECT LOWER ...
- oracle中的instr()
INSTR (源字符串, 目标字符串, 起始位置, 匹配序号) 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始 到字符的结尾就结束. ...
- Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题
转: Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题 在实际PL/SQL编程中,我们要对动态取出来的一组数据,进行For循环处理,其基本程序逻辑为: ...
- 创建类似于Oracle中decode的函数
-- 创建类似于Oracle中decode的函数create or replace function decode(variadic p_decode_list text[])returns text ...
- Oracle中的substr()函数 详解及应用
注:本文来源于<Oracle中的substr()函数 详解及应用> 1)substr函数格式 (俗称:字符截取函数) 格式1: substr(string string, int a, ...
随机推荐
- buff/cache 占用过高解决方法
cache 读磁盘时,数据从磁盘读出后,暂留在缓冲区(cache),为后续程序的使用做准备 buffer 写磁盘时,先保存到磁盘缓冲区(buffer),然后再写入到磁盘 三条命令: #echo 1 & ...
- Linux 文本三剑客之 awk
Linux 系统中一切皆文件. 文件是个文本.可以读.可以写,如果是二进制文件,还能执行. 在使用Linux的时候,大都是要和各式各样文件打交道.熟悉文本的读取.编辑.筛选就是linux系统管理员的必 ...
- Spark记录(一):Spark全景概述
一.Spark是什么 Spark是一个开源的大数据处理引擎. 二.Spark的主要组件如下图所示: 三.Spark运行时架构 Spark共有三种运行模式:本地模式.集群模式.客户端模式. 生产环境基 ...
- 八. Go并发编程--errGroup
一. 前言 了解 sync.WaitGroup的用法都知道 一个 goroutine 需要等待多个 goroutine 完成和多个 goroutine 等待一个 goroutine 干活时都可以解决问 ...
- centos redhat 安装g++
正确安装命令 : yum install gcc-c++ libstdc++-devel 安装后可以在/bin/找到
- Python之模块导入(不看会后悔系列)
看到这个标题猜想大家内心OS: 什么辣鸡水文,划走划走~ 别急有干货! 静态导入(照顾新人) 假设现在有两个文件a,b在不同目录,b文件想引用a文件中的函数: # test_module/sub_mo ...
- Linux ns 6. Network Namespace 详解
文章目录 1. 简介 1.1 Docker Network 桥接模式配置 2. 代码解析 2.1 copy_net_ns() 2.2 pernet_list 2.2.1 loopback_net_op ...
- 【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;
面向过程与面向对象: 1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果: 2.面向对象思想的典型 ...
- windows 上搭建 sftp 服务器 -freesshd全过程( 在linux上部署逐浪CMS的必读教程)
文章标题: windows 上搭建 sftp 服务器 - freesshd全过程 关键字 : freesshd 文章分类: 教程 创建时间: 2020年3月23日 缘由 动手 第一步:添加用户 第二步 ...
- LOTO示波器实测——光照强度传感器
loto最近推出了很多的周边传感器模块的实测案例,本文介绍和演示LOTO示波器实测光照强度传感器的使用. 下图就是主角感光模块,可以用来测量光照强度. 这个模块也很简单,只有3个引脚,一个电源,3.3 ...