例子:
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關鍵字查詢效率的低下。特別是在復雜查詢或者大表查詢中,用戶可以明顯感覺到速度比較慢。
怎麼解決效率的難題呢?答案也正是索引。
合理的利用索引,可以大幅度的提升數據庫的查詢性能。
關於索引的合理應用,還在研究中。。