關於like后面的條件,Oracle提供了四種匹配模式:
1,% :表示任意0個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示。
比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
將會把u_name為“張三”,“張貓三”、“三腳貓”,“唐三藏”等等有“三”的記錄全找出來。
另外,如果需要找出u_name中既有“三”又有“貓”的記錄,請使用and條件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'
若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%貓%'
雖然能搜索出“三腳貓”,但不能搜索出符合條件的“張貓三”。
2,_ : 表示任意單個字符。匹配單個任意字符,它常用來限制表達式的字符長度語句:
比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”這樣u_name為三個字且中間一個字是“三”的;
再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三腳貓”這樣name為三個字且第一個字是“三”的;
3. regexp_like 正則表達式函數查詢
--查詢FieldName中以1開頭60結束的記錄並且長度是7位
select * from fzq where FieldName like '1____60';
select * from fzq where regexp_like(FieldName,'1....60');
--查詢FieldName中以1開頭60結束的記錄並且長度是7位並且全部是數字的記錄。
--使用like就不是很好實現了。
select * from fzq where regexp_like(FieldName,'1[0-9]{4}60');
-- 也可以這樣實現,使用字符集。
select * from fzq where regexp_like(FieldName,'1[[:digit:]]{4}60');
-- 查詢FieldName中不是純數字的記錄
select * from fzq where not regexp_like(FieldName,'^[[:digit:]]+$');
-- 查詢FieldName中不包含任何數字的記錄。
select * from fzq where regexp_like(FieldName,'^[^[:digit:]]+$');
--查詢以12或者1b開頭的記錄.不區分大小寫。
select * from fzq where regexp_like(FieldName,'^1[2b]','i');
--查詢以12或者1b開頭的記錄.區分大小寫。
select * from fzq where regexp_like(FieldName,'^1[2B]');
-- 查詢數據中包含空白的記錄。
select * from fzq where regexp_like(FieldName,'[[:space:]]');
--查詢所有包含小寫字母或者數字的記錄。
select * from fzq where regexp_like(FieldName,'^([a-z]+|[0-9]+)$');
--查詢任何包含標點符號的記錄。
select * from fzq where regexp_like(FieldName,'[[:punct:]]');