1、instr函式
instr函式是乙個字串處理函式,它在oracle/plsql中是返回子字串在源字串中的位置,如果在源串中沒有找到子串,則返回0。
instr函式定義如下:
/*
* 返回子字串在源字串中的位置(字串位置從1開始,而不是從0開始)
* @param str 源字串
* @param substr 子字串
* @param position 檢索位置,可省略(預設為1),引數為正時,從左向右檢索,引數為負時,從右向左檢索
* @param occurrence 檢索子串出現次數(即子串在源串第幾次出現),可省略(預設為1),值只能為正整數,否則會報錯
* @return 返回子字串在源字串中出現的位置(沒找到返回0)
*/
instr(str, substr, position, occurrence);
例如:select instr('hello world', 'l') from dual; --結果:3
select instr('hello world', 'l', 5) from dual; --結果:10 (從左向右第5位開始檢索'l'在'hello world'中出現的位置)
select instr('hello world', 'l', -1) from dual; --結果:10 (從右向左第1位開始檢索'l'在'hello world'中出現的位置)
select instr('hello world', 'l', 2, 2) from dual; --結果:4 (從左向右第2位開始檢索'l'在'hello world'中第2次出現的位置)
select instr('hello world', 'l', -3, 3) from dual; --結果:0 (從右向左第3位開始檢索'l'在'hello world'中第3次出現的位置)
2、like關鍵字
like關鍵字也可稱為萬用字元,在sql中用於模糊查詢。可以使用「%」和「_」萬用字元,其中「%」代表0個或多個字元,「_」代表1個字元。
例如:select * from studenttab where stuname like '%張%'; --在studenttab表中查詢stuname中含有字元「張」的學員
select * from studenttab where stuname like '張_'; --在studenttab表中查詢stuname中以「張」開頭,名字長度為2的學員(即「張三」、「張四」,而不會檢測出「張三三」)
3、instr和like的使用:
select * from studenttab where stuname like '%張%';
就相當於
select * from studenttab where instr(stuname, '張') > 0;
select * from studenttab where stuname not like '%張%';
就相當於
select * from studenttab where instr(stuname, '張') = 0;
4、總結
<1> instr>0 和like、instr=0 和not like 一般來說查詢的結果相同(不考慮特殊字元)
<2> instr是乙個函式,可以建立函式索引,如果過濾的條件有索引,那麼instr就可以提高效能。
<3> like查詢時,以'%'開頭,列所加的索引是不起作用的。
<4> 在沒有索引的前提下,當資料量比較大時,instr要比like效率高。
SQL中instr和like的使用區別
1 instr函式 instr函式是乙個字串處理函式,它在oracle plsql中是返回子字串在源字串中的位置,如果在源串中沒有找到子串,則返回0。instr函式定義如下 返回子字串在源字串中的位置 字串位置從1開始,而不是從0開始 param str 源字串 param substr 子字串 p...
ORACLE中Like與Instr效能大比拼
t表中將近有1100萬資料,很多時候,我們要進行字串匹配,在sql語句中,我們通常使用like來達到我們搜尋的目標。但經過實際測試發現,like的效率與instr函式差別相當大。下面是一些測試結果 sql set timing on sql select count from t where ins...
ORACLE中like與instr效能大比拼
業務系統中t表中將近有1100萬資料,很多時候,我們要進行字串匹配,在sql語句中,我們通常使用like來達到我們搜尋的目標。但經過實際測試發現,like的效率與instr函式差別相當大。下面是一些測試結果 sql set timing on sql select count from t wher...