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