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