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