SQL 模糊查詢


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

一般模糊語句格式如下:

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

 

 

 

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM