SQL中instr和like的使用區別

2021-10-10 02:57:18 字數 1807 閱讀 4040

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...