instr和like的使用區別


1、instr函數

 instr函數是一個字符串處理函數,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中沒有找到子串,則返回0。

instr函數定義如下:

  1. /*
  2. * 返回子字符串在源字符串中的位置(字符串位置從1開始,而不是從0開始)
  3. * @param str 源字符串
  4. * @param substr 子字符串
  5. * @param position 檢索位置,可省略(默認為1),參數為正時,從左向右檢索,參數為負時,從右向左檢索
  6. * @param occurrence 檢索子串出現次數(即子串在源串第幾次出現),可省略(默認為1),值只能為正整數,否則會報錯
  7. * @return 返回子字符串在源字符串中出現的位置(沒找到返回0)
  8. */
  9. instr(str, substr, position, occurrence);
例如:
  1. SELECT INSTR('hello world', 'l') FROM DUAL; --結果:3
  2. SELECT INSTR('hello world', 'l', 5) FROM DUAL; --結果:10 (從左向右第5位開始檢索'l'在'hello world'中出現的位置)
  3. SELECT INSTR('hello world', 'l', -1) FROM DUAL; --結果:10 (從右向左第1位開始檢索'l'在'hello world'中出現的位置)
  4. SELECT INSTR('hello world', 'l', 2, 2) FROM DUAL; --結果:4 (從左向右第2位開始檢索'l'在'hello world'中第2次出現的位置)
  5. SELECT INSTR('hello world', 'l', -3, 3) FROM DUAL; --結果:0 (從右向左第3位開始檢索'l'在'hello world'中第3次出現的位置)
2、like關鍵字

 like關鍵字也可稱為通配符,在SQL中用於模糊查詢。可以使用“%”和“_”通配符,其中“%”代表0個或多個字符,“_”代表1個字符。
例如:

  1. SELECT * FROM STUDENTTAB WHERE STUNAME LIKE '%張%'; --在STUDENTTAB表中查詢STUNAME中含有字符“張”的學員
  2. SELECT * FROM STUDENTTAB WHERE STUNAME LIKE '張_'; --在STUDENTTAB表中查詢STUNAME中以“張”開頭,名字長度為2的學員(即“張三”、“張四”,而不會檢測出“張三三”)
3、instr和like的使用:
  1. SELECT * FROM STUDENTTAB WHERE STUNAME LIKE '%張%';
  2. 就相當於
  3. SELECT * FROM STUDENTTAB WHERE INSTR(STUNAME, '張') > 0;
  4.  
  5. SELECT * FROM STUDENTTAB WHERE STUNAME NOT LIKE '%張%';
  6. 就相當於
  7. SELECT * FROM STUDENTTAB WHERE INSTR(STUNAME, '張') = 0;
     
     
     
4、總結
<1> instr>0 和like、instr=0 和not like 一般來說查詢的結果相同(不考慮特殊字符)
<2> instr是一個函數,可以建立函數索引,如果過濾的條件有索引,那么instr就可以提高性能。
<3> like查詢時,以'%'開頭,列所加的索引是不起作用的。
<4> 在沒有索引的前提下,當數據量比較大時,instr要比like效率高。


免責聲明!

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



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