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效率高。
原文:https://blog.csdn.net/lanmuhhh2015/article/details/79216804
PS:LIKE 和 RLIKE 的區別:
LIKE
語法格式為A [NOT] LIKE B,B是sql下的簡單正則表達式,也叫通配符模式,如_匹配一個字符,%可以匹配任意多個字符,A會對表達式B做匹配,如果通過返回TRUE,如果不通過則返回FALSE,舉個栗子
SELECT name LIKE ‘%Alice’ FROM table1,表示選擇name列內以ALICE作為結尾的數據
RLIKE
語法格式為A [NOT] RLIKE B,基於java的正則表達式接口實現,如果A中有與B匹配則返回TRUE,否則返回FALSE,java的正則表達式相信大家都比較熟悉就不舉具體的例子了
區別
通配符匹配的是整個列,比如helloworld就無法和’world’通配,但是正則表達式則是在列值內進行匹配,helloworld就可以和’world’匹配返回TRUE
另外,引入RLIKE該操作符的目的是引入正則表達式這樣一個更加強大的語言來匹配條件,舉個簡單的對比例子
A RLIKE '.*(Alice|Ben).*'
匹配包含Alice或者Ben的字段,使用LIKE的話需要用兩個LIKE來做組合,下面是使用LIKE改成相同效果
A LIKE '%Alice%' OR A LIKE '%Ben%'
原文:https://blog.csdn.net/u013019431/article/details/78491037