執行數據庫查詢時,有完整查詢和模糊查詢之分。
一般模糊語句格式如下:
SELECT 字段 FROM 表 WHERE 某字段 LIKE 條件;
其中,關於條件,SQL提供了四種匹配模式:
1、%:表示零個或多個字符。
可以匹配任意類型和任意長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示。
比如:select * from flow_user where username like '%王%';
將會把flow_user這張表里面,列名username中還有“王”的記錄全部查詢出來。
另外,如果需要找到flow_user這張表里面,字段username中既有“唐”,又有“英”的記錄,可以使用and條件,
select * from flow_user where username like '%英%' and username like '%唐%';
則可以查詢出來所有包含“英”和“唐”的所有內容,“英”和“唐”所在的前后位置無所謂。
若是用select * from flow_user where username like '%英%唐%';
可以查出來包含“英唐”的內容,但是查不出來“唐英”的內容。
2、_:表示任意單個字符。匹配單個任意字符,它常用來限制表達式的字符長度:
select * from flow_user where username like '_英_';
只能找到“王英琨”這樣username為三個字且中間一個字是“英”的內容。
再比如:select * from flow_user where username like '英__';
只能找到“英雄點”這樣username為三個字且第一個字是“英”的內容。
3、[]:表示括號內所列字符中的一個(類似正則表達式)。指定一個字符、字符串或范圍,要求所匹配的對象為他們中的任一個。
select * from flow_user where username LIKE'[王李張]飛';
將找出“王飛”“李飛”“張飛”(而不是“張王李飛”)。
如[]內有一系列字符(01234,abcde之類的)則可略寫為“0-4”,“a-e”:
select * from flow_user where username like '老[0-9]';
將找出“老1”、“老2”、……、“老9”;
Oracle 10g以上的版本用法為:
select * from flow_user where regexp_like(username, '[張王李]飛');
4、[^]:表示不在括號所列之內的單個字符。其取之和[]相同,但它所要求匹配對象為指定字符以外的任一個字符。
select * from flow_user where username LIKE'[^王李張]飛';
將找出不是“王飛”“李飛”“張飛“的”趙飛“、”吳飛“等。
注:oracle like 不支持正則,你可以使用支持like的正則regexp_like
5、查詢內容包含通配符時:
由於通配符的緣故,導致查詢特殊字符“%”、“_”、“[”的語句無法正常實現,把特殊字符用“[]”括起來便可以正常查詢。
function sqlencode(str) str=replace(str,"[","[[]") '此句一定要在最前 str=replace(str,"_","[_]") str=replace(str,"%","[%]") sqlencode=str end function