INSTR用法
INSTR方法的格式为:INSTR(源字符串, 要查找的字符串, 从第几个字符开始(默认为1), 要找到第几个匹配的序号(默认为1))
返回找到的位置,如果找不到则返回0.
例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 在字符串中查找'OR',从第三个字符位置开始查找"OR",取第三个字后第2个匹配项的位置。
默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。
所以SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "aaa" FROM DUAL的显示结果是
Instring
——————
14
为什么是14而不是13,因为oracle这里第一个位置是1而不像java是0
下面引自:https://blog.csdn.net/bamboopot/article/details/8127033
与like模糊查询的比较
instr(title,'手册')>0 相当于 title like '%手册%'
instr(title,'手册')=1 相当于 title like '手册%'
instr(title,'手册')=0 相当于 title not like '%手册%'
t表中将近有1100万数据,很多时候,我们要进行字符串匹配,在SQL语句中,我们通常使用like来达到我们搜索的目标。但经过实际测试发现,like的效率与instr函数差别相当大。下面是一些测试结果:
SQL> set timing on
SQL> select count(*) from t where instr(title,'手册')>0;
COUNT(*)
----------
65881
Elapsed: 00:00:11.04
SQL> select count(*) from t where title like '%手册%';
COUNT(*)
----------
65881
Elapsed: 00:00:31.47
SQL> select count(*) from t where instr(title,'手册')=0;
COUNT(*)
----------
11554580
Elapsed: 00:00:11.31
SQL> select count(*) from t where title not like '%手册%';
COUNT(*)
----------
11554580
另外,我在结另外一个2亿多的表,使用8个并行,使用like查询很久都不出来结果,但使用instr,4分钟即完成查找,性能是相当的好。这些小技巧用好,工作效率提高不少。通过上面的测试说明,ORACLE内建的一些函数,是经过相当程度的优化的。
instr(title,’aaa’)>0 相当于like
instr(title,’aaa’)=0 相当于not like
特殊用法:
select id, name from users where instr('101914, 104703', id) > 0;
它等价于
select id, name from users where id = 101914 or id = 104703;
使用Oracle的instr函数与索引配合提高模糊查询的效率
一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式:
1.select * from tb where name like '%XX%';
2.select * from tb where instr(name,'XX')>0;
若是在name字段上没有加索引,两者效率差不多,基本没有区别。
为提高效率,我们在name字段上可以加上非唯一性索引:
create index idx_tb_name on tb(name);
这样,再使用
select * from tb where instr(name,'XX')>0;
这样的语句查询,效率可以提高不少,表数据量越大时两者差别越大。但也要顾及到name字段加上索引后DML语句会使索引数据重新排序的影响。
相关推荐
在Oracle数据库中,进行字符串匹配查询时,我们经常会遇到`LIKE`和`INSTR`这两个操作符。它们在处理模糊查询时各有特点,但性能上可能存在显著差异。本篇文章将探讨`LIKE`与`INSTR`在实际应用中的性能表现,并提供...
Oracle分析函数是数据库管理系统Oracle中的一种高级查询工具,它们用于处理行集,计算基于特定窗口内的数据的聚合值。分析函数的主要特点是返回的结果不仅仅是一行,而是多行,这与传统的聚合函数(如SUM, AVG等)...
Oracle中的`instr`函数是一个非常实用的字符串处理函数,它用于在源字符串中查找目标字符串的位置。函数的基本语法如下: ```sql instr(string1, string2 [, start_position [, nth_appearance ] ]) ``` - `string...
Oracle 10G函数大全是Oracle数据库在10g版本中的一个重要参考资料,它包含了大量用于数据处理、查询优化以及数据库管理的内置函数。这个中文帮助文档是开发者和DBA们在进行Oracle数据库操作时的重要工具,它能提供...
"ORACLE函数大全与整理"这个资源集成了Oracle数据库中常用和不常用的各类函数,为Oracle应用开发者提供了详尽的参考。 一、Oracle函数类型 Oracle函数主要分为以下几类: 1. 数学函数:如ABS()用于返回绝对值,MOD...
"Oracle函数大全中文API文档"是一个非常实用的资源,它提供了对Oracle数据库所有内置函数的详尽解释,帮助开发者和DBA快速理解和使用这些函数。 1. **日期与时间函数**: Oracle提供了处理日期和时间的大量函数,...
`instr()`函数可以与MySQL中的`LIKE`操作符相提并论,它们都能实现模糊查询。例如: - MySQL: `select * from tableName where name like '%helloworld%'` - Oracle: `select * from tableName where instr(name,...
在上面的示例中,我们使用 INSTR 函数来查找 products 表中的 description 字段中是否包含字符串 "some text"。如果包含,则返回大于 0 的值,否则返回 0。 DBMS_LOB 包中的过程函数 DBMS_LOB 包中提供了多种过程...
通过这份"oracle函数大全(分类显示).chm"文档,你可以详细了解到每个函数的具体用法、参数和返回值,从而更好地理解和应用到实际的数据库操作中。随着对Oracle的理解加深,你会发现这些函数能极大地提高你的数据库...
8. INSTR函数:返回字符串中子字符串出现的位置,可以设置搜索起始位置和出现的次数。 9. LPAD和RPAD函数:用于在字符串的左侧或右侧填充字符,直到达到指定的长度。 10. LTRIM和RTRIM函数:用于去除字符串左侧或...
Oracle数据库中的函数是SQL查询和PL/SQL编程中不可或缺的一部分,它们帮助用户处理和操作数据。函数分为两类:单行函数和组函数。本篇主要关注单行函数及其使用。 单行函数在Oracle中用于处理单行数据,适用于...
本文将详细介绍Oracle数据库中支持的四个主要正则表达式函数:`REGEXP_LIKE`、`REGEXP_INSTR`、`REGEXP_SUBSTR`和`REGEXP_REPLACE`,以及如何使用POSIX正则表达式。 #### 二、Oracle正则表达式基础 ##### 1. POSIX...
当我们无法使用`contains`谓词,比如因为字段没有建立索引时,我们可以采用`instr`或`like`函数来完成这个任务。这两种方法各有特点,下面将详细介绍它们的用法。 **1. `contains`谓词** `contains`是Oracle的全文...
10. 连接查询和嵌套查询中使用的函数,如CONNECT_BY_ROOT()和LEVEL用于层次查询,而子查询中可能用到的任何函数,如MINUS, INTERSECT, UNION等。 11. 逻辑函数:AND, OR, NOT用于逻辑运算,DECODE()和NVL2()提供...
Oracle函数大全涵盖了大量的内置函数,这些函数在数据库管理和查询中起着至关重要的作用。Oracle的函数分为两类:单行函数和组函数。本篇重点讨论单行函数及其使用。 单行函数是应用于单行数据的函数,它们可以用于...
3. **INSTR函数**:在某些数据库系统(如Oracle),`INSTR`函数可以用来检查字符串中是否包含特定子串,虽然这不是标准SQL的一部分,但在某些模糊查询场景中也十分有用。 4. **DELPHI中的ADO或DAO组件**:在DELPHI...
在mysql中使用内部函数instr,可代替传统的like方式查询,并且速度更快。 instr 函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0. 例如,查询字段name中带”军”的...
本文将基于"Oracle常用函数 CHM"这个资源,详细解析一些Oracle数据库中常见的函数及其应用,帮助你更好地理解和掌握Oracle SQL查询语言。 1. **字符串处理函数** - `UPPER()` 和 `LOWER()`:这两个函数用于将字符...
例如,在查询中使用 `WHERE LOWER(colorname) LIKE '%white%'` 可以不区分大小写地搜索包含 "white" 的颜色名称。 ### INSTR() 和 INSTRB() - **INSTR()** 函数用于查找一个字符串在另一个字符串中的位置。它接受...