`

oracle中instr函数用法 与 like模糊查询的比较

 
阅读更多

 

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模糊查询性能大比拼

    在Oracle数据库中,进行字符串匹配查询时,我们经常会遇到`LIKE`和`INSTR`这两个操作符。它们在处理模糊查询时各有特点,但性能上可能存在显著差异。本篇文章将探讨`LIKE`与`INSTR`在实际应用中的性能表现,并提供...

    Oracle中instr函数使用方法

    Oracle中的`instr`函数是一个非常实用的字符串处理函数,它用于在源字符串中查找目标字符串的位置。函数的基本语法如下: ```sql instr(string1, string2 [, start_position [, nth_appearance ] ]) ``` - `string...

    oracle 10G函数大全(中文)

    Oracle 10G函数大全是Oracle数据库在10g版本中的一个重要参考资料,它包含了大量用于数据处理、查询优化以及数据库管理的内置函数。这个中文帮助文档是开发者和DBA们在进行Oracle数据库操作时的重要工具,它能提供...

    oracle使用instr或like方法判断是否包含字符串

    当我们无法使用`contains`谓词,比如因为字段没有建立索引时,我们可以采用`instr`或`like`函数来完成这个任务。这两种方法各有特点,下面将详细介绍它们的用法。 **1. `contains`谓词** `contains`是Oracle的全文...

    ORACLE函数大全与整理

    "ORACLE函数大全与整理"这个资源集成了Oracle数据库中常用和不常用的各类函数,为Oracle应用开发者提供了详尽的参考。 一、Oracle函数类型 Oracle函数主要分为以下几类: 1. 数学函数:如ABS()用于返回绝对值,MOD...

    oracle函数大全中文api文档

    "Oracle函数大全中文API文档"是一个非常实用的资源,它提供了对Oracle数据库所有内置函数的详尽解释,帮助开发者和DBA快速理解和使用这些函数。 1. **日期与时间函数**: Oracle提供了处理日期和时间的大量函数,...

    Oracle中的instr()函数应用及使用详解

    `instr()`函数可以与MySQL中的`LIKE`操作符相提并论,它们都能实现模糊查询。例如: - MySQL: `select * from tableName where name like '%helloworld%'` - Oracle: `select * from tableName where instr(name,...

    oracle函数大全(分类显示).zip_Oracle 函数分类_oracle_oracle函数分类_oracle函数查阅用文档

    通过这份"oracle函数大全(分类显示).chm"文档,你可以详细了解到每个函数的具体用法、参数和返回值,从而更好地理解和应用到实际的数据库操作中。随着对Oracle的理解加深,你会发现这些函数能极大地提高你的数据库...

    Oracle函数列表速查

    8. INSTR函数:返回字符串中子字符串出现的位置,可以设置搜索起始位置和出现的次数。 9. LPAD和RPAD函数:用于在字符串的左侧或右侧填充字符,直到达到指定的长度。 10. LTRIM和RTRIM函数:用于去除字符串左侧或...

    oracle函数速查

    Oracle数据库中的函数是SQL查询和PL/SQL编程中不可或缺的一部分,它们帮助用户处理和操作数据。函数分为两类:单行函数和组函数。本篇主要关注单行函数及其使用。 单行函数在Oracle中用于处理单行数据,适用于...

    Oracle正则表达式函数全面解析

    本文将详细介绍Oracle数据库中支持的四个主要正则表达式函数:`REGEXP_LIKE`、`REGEXP_INSTR`、`REGEXP_SUBSTR`和`REGEXP_REPLACE`,以及如何使用POSIX正则表达式。 #### 二、Oracle正则表达式基础 ##### 1. POSIX...

    oracle 110个常用函数.zip

    10. 连接查询和嵌套查询中使用的函数,如CONNECT_BY_ROOT()和LEVEL用于层次查询,而子查询中可能用到的任何函数,如MINUS, INTERSECT, UNION等。 11. 逻辑函数:AND, OR, NOT用于逻辑运算,DECODE()和NVL2()提供...

    oracle函数大全

    Oracle函数大全涵盖了大量的内置函数,这些函数在数据库管理和查询中起着至关重要的作用。Oracle的函数分为两类:单行函数和组函数。本篇重点讨论单行函数及其使用。 单行函数是应用于单行数据的函数,它们可以用于...

    模糊查询的例子

    3. **INSTR函数**:在某些数据库系统(如Oracle),`INSTR`函数可以用来检查字符串中是否包含特定子串,虽然这不是标准SQL的一部分,但在某些模糊查询场景中也十分有用。 4. **DELPHI中的ADO或DAO组件**:在DELPHI...

    mysql中使用instr进行模糊查询方法介绍

    在mysql中使用内部函数instr,可代替传统的like方式查询,并且速度更快。 instr 函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0. 例如,查询字段name中带”军”的...

    oracle常用函数 CHM

    本文将基于"Oracle常用函数 CHM"这个资源,详细解析一些Oracle数据库中常见的函数及其应用,帮助你更好地理解和掌握Oracle SQL查询语言。 1. **字符串处理函数** - `UPPER()` 和 `LOWER()`:这两个函数用于将字符...

    Oracle常用函数.txt

    例如,在查询中使用 `WHERE LOWER(colorname) LIKE '%white%'` 可以不区分大小写地搜索包含 "white" 的颜色名称。 ### INSTR() 和 INSTRB() - **INSTR()** 函数用于查找一个字符串在另一个字符串中的位置。它接受...

    oracle函数速查手册

    "Oracle函数速查手册"是一份非常实用的参考资料,它涵盖了Oracle数据库中的各种函数,帮助用户快速查找并理解如何使用这些函数。在数据库管理、查询优化以及复杂数据处理时,这些函数起着至关重要的作用。 Oracle...

Global site tag (gtag.js) - Google Analytics