Oracle模糊查詢方法

2021-12-29 22:01:17 字數 2077 閱讀 1143

在這個資訊量劇增的時代,如何幫助使用者從海量資料中檢索到想要的資料,模糊查詢是必不可少的。那麼在oracle中模糊查詢是如何實現的呢?

一、我們可以在where子句中使用like關鍵字來達到oracle模糊查詢的效果;在where子句中,可以對datetime、char、varchar欄位型別的列用like關鍵字配合萬用字元來實現模糊查詢,以下是可使用的萬用字元:

(1)% :零或者多個字元,使用%有三種情況

字段 like '%關鍵字%'字段包含"關鍵字"的記錄

字段 like '關鍵字%'欄位以"關鍵字"開始的記錄

字段 like '%關鍵字'欄位以"關鍵字"結束的記錄

例子:select * from [user] where uname like '%三%'

搜尋結果:「張三」,「小三」、「三腳貓」,「貓三腳」 有「三」 的記錄全找出來。

select * from [user] where uname like '%三' (從後開始匹配)

搜尋結果:「張三」,「小三」

另外,如果需要找出uname中既有「三」又有「貓」的記錄,請使用and條件

select *from [user] where uname like '%三%' and uname like '%貓%'

若使用select * from [user] where uname like '%三%貓%',雖然能搜尋出「三腳貓」,但不能搜尋出「貓三腳」。

(2)_: 單一任何字元(下劃線)常用來限制表示式的字元長度語句:

例子:select * from [user] where uname like '_三_'

搜尋結果:「貓三腳」這樣uname為三個字元且中間乙個是「三」的;

select * from [user] where uname like '三__';

搜尋結果:「三腳貓」這樣uname為三個字元且第乙個是「三」的;

(3):在某一範圍內的字元,表示括號內所列字元中的乙個(類似正規表示式)。指定乙個字元、字串或範圍,要求所匹配物件為它們中的任乙個。

例子:select * from [user] where u_name like '[張李王]三'

搜尋結果:「張三」、「李三」、「王三」(而不是「張李王三」);

如 [ ]內有一系列字元(01234、abcde之類的)則可略寫為「0-4」、「a-e」

select * from [user] where u_name like '老[1-9]'

搜尋結果:「老1」、「老2」、……、「老9」;

(4)[^]: 不在某範圍內的字元,用法與[ ]相反。

二、在oracle中提供了instr(strsource,strtarget)函式,比使用'%關鍵字%'的模式效率高很多。

instr函式也有三種情況:

instr(字段,'關鍵字')>0相當於 欄位like '%關鍵字%'

instr(字段,'關鍵字')=1相當於 欄位like '關鍵字%'

instr(字段,'關鍵字')=0相當於 欄位not like '%關鍵字%'

例子:select * from [user] whereinstr(uname ,'三')>0

用法參照上面的like 即可

特殊用法:

select id, namefrom user where instr('101914, 104703', id) > 0;

它等價於

select id, namefrom user where id = 101914 or id = 104703;

在資料量比較少的時候,可以直接使用上面這兩種方法,但是當資料量特別大的時候,我們就應該考慮效率的問題了。雖說在效率上instr比like關鍵字方法效率要高出不少,但這也僅僅是在一定程度上而言,遠不能滿足我們的需要。

為什麼關鍵字查詢效率這麼低呢?這是由於在利用這些關鍵字查詢的時候,資料庫系統不是通過索引來查詢,而是採用順序掃瞄的方式來查詢。顯然,真是這種技術特性,造成了like關鍵字查詢效率的低下。特別是在複雜查詢或者大表查詢中,使用者可以明顯感覺到速度比較慢。

怎麼解決效率的難題呢?答案也正是索引。

合理的利用索引,可以大幅度的提公升資料庫的查詢效能。

關於索引的合理應用,還在研究中。。

Oracle 模糊查詢

在where子句中,可以對datetime char varchar欄位型別的列用like子句配合萬用字元選取那些 很像.的資料記錄,以下是可使用的萬用字元 零或者多個字元 單一任何字元 下劃線 特殊字元 在某一範圍內的字元,如 0 9 或者 aeth 不在某範圍內的字元,如 0 9 或者 aeth...

oracle 模糊查詢

oracle10g以上支援正規表示式的函式主要有下面四個 1,regexp like 與like的功能相似 2,regexp instr 與instr的功能相似 3,regexp substr 與substr的功能相似 4,regexp replace 與replace的功能相似 posix 正規表...

oracle模糊查詢

執行資料庫查詢時,有完整查詢和模糊查詢之分。一般模糊語句格式如下 select 字段 from 表 where 某欄位 like 條件 其中,關於條件,sql提供了四種匹配模式 1 表示零個或多個字元。可以匹配任意型別和任意長度的字元,有些情況下若是中文,請使用兩個百分號 表示。比如 select ...