oracle instr函數(oracle 用instr 來代替 like)


oracle instr函數
對於instr函數,我們經常這樣使用:從一個字符串中查找指定子串的位置。例如:

SQL> select instr('Oracle','or') position from dual;

POSITION

----------

        1
從字符串'oracle'的第一個位置開始,向后查找第一個出現子串'or'出現的位置。

其實instr共有4個參數,格式為“instr(string, substring, startposition, occurrence)”。可實現子串的如下搜索:

1.從指定位置開始搜索子串

2.指定搜索第幾次出現的子串的位置

3.從后向前搜索

--1.從第3個字符開始搜索

SQL> select instr('oracleor','or', 3) position from dual;

POSITION

----------

        7

--2.從第1個字符開始,搜索第2次出現子串的位置

SQL> select instr('oracleor','or', 1, 2) position from dual;

POSITION

----------

        7

--3.從倒數第1個字符開始,搜索第1次出現子串的位置

SQL> select instr('oracleor','or', -1, 1) position from dual;

POSITION

----------

        7

--3.從倒數第1個字符開始,搜索第2次出現子串的位置

SQL> select instr('oracleor','or', -1, 2) position from dual;

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

 

原文地址:http://blog.csdn.net/hzhsan/article/details/9186637


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM