1. 程式人生 > >資料庫查詢模糊匹配

資料庫查詢模糊匹配

轉載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

執行資料庫查詢時,有完整查詢和模糊查詢之分。