萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql正則匹配模糊查詢的例子

mysql正則匹配模糊查詢的例子

mysql正則匹配模糊查詢我們最簡單的是like但其實還有正則可以使用只是許多的朋友不使用了,下面來為各位總結一下。


MySQL僅支持多數正則表達式實現的一個很小的子集。

----------------------

9.2.1  基本字符匹配

REGEXP後所跟的東西作為正則表達式處理。

 

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;

------返回------
+------------------------+
|    prod_name    |
+------------------------+
|  JetPack 1000  |
+------------------------+

 

 
.  表示匹配任意一個字符。

 

SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;

------------返回-----------

+-------------------------+
|     prod_name    |
+-------------------------+
|   JetPack 1000  |
|   JetPack 2000  |
+-------------------------+

 

MySQL中的正則表達式匹配不區分大小寫。

為區分大小寫,可使用BINARY關鍵字。

如:WHERE prod_name REGEXP BINARY 'JetPack .000'

 

9.2.2  進行OR匹配

為搜索兩個串之一(或者這個串,或者為另一個串),使用 | 。

| 作為OR操作符,表示匹配其中之一。可給出兩個以上的OR條件。

代碼
 

[ ] 匹配任何單一字符。

[123]定義一組字符,意思是匹配1或2或3.

[ ]是另外一種形式的OR語句,[123] Ton  就是  [1 | 2 | 3] Ton 的縮寫。

^ 否定一個字符集合,將匹配除指定字符外的任何東西。[^123]將匹配除這些字符外的任何東西。

代碼
 

匹配范圍

[0123456789] 或 [0-9] 將匹配數字0到9

[a-z] 匹配任意字母符號

代碼
 

匹配特殊字符

\\  為前導。即轉義.正則表達式內具有特殊意義的所有字符都必須以這種方式轉義。

\\-  表示查找 -

\\.  表示查找 .

代碼
 

\\  也用來引用元字符(具有特殊意義的字符)

\\f    換頁
\\n    換行
\\r    回車
\\t    制表
\\v    縱向制表
 

匹配字符類

代碼
 

匹配多個實例

代碼
 

以下例子:s後的?使s可選,因為?匹配它前面的任何字符的0次或1次出現。

代碼
 

匹配連在一直的4位數字:WHERE prod_name REGEXP '[[:digit:]]{4}'

 

定位符

^         文本的開始
$        文本的末尾
[[:<:]]  詞的開始
[[:>:]]  詞的結尾
 

代碼
 

^的雙重用途:在集合中(用[ ]定義),用它來否定該集合。否則,用來指串的開始和。

LIKE 匹配整個串,而REGEXP匹配子串。

    簡單的正則表達式測試  可以在不使用數據庫的情況下用SELECT來測試正則表達式。

    REGEXP檢查總是返回0(沒有匹配)或1(匹配),可以用帶文字串的REGEXP來測

    試表達式,並試驗它們。相應的語法如下:

        SELECT 'hello' REGEXP '[0-9]'

    這個例子返回0(因為文本hello中沒有數字)。

下面看看like及正則的例子

我們在查詢某個字段的時候,有時候只想匹配某段數據,比如想查詢這篇文章的所有關鍵詞是否存在某個關鍵詞,我們往往需要匹配,我們下面來講解一下如何匹配查詢某個關鍵詞值

SQL模糊查詢的語法為

“SELECT column FROM table WHERE column LIKE ';pattern';”。

SQL提供了四種匹配模式:

1. % 表示任意0個或多個字符。如下語句:
SELECT * FROM user WHERE name LIKE ';%三%';
將會把name為“張三”,“三腳貓”,“唐三藏”等等有“三”的全找出來;

2. _ 表示任意單個字符。語句:

SELECT * FROM user WHERE name LIKE ';_三_';
只找出“唐三藏”這樣name為三個字且中間一個字是“三”的;
SELECT * FROM user WHERE name LIKE ';三__';
只找出“三腳貓”這樣name為三個字且第一個字是“三”的;

3. [ ] 表示括號內所列字符中的一個(類似與正則表達式)。語句:

SELECT * FROM user WHERE name LIKE ';[張李王]三';
將找出“張三”、“李三”、“王三”(而不是“張李王三”);

如 [ ] 內有一系列字符(01234、abcde之類的)則可略寫為“0-4”、“a-e”
SELECT * FROM user WHERE name LIKE ';老[1-9]';
將找出“老1”、“老2”、……、“老9”;
如要找“-”字符請將其放在首位:';張三[-1-9]';

4. [^ ] 表示不在括號所列之內的單個字符。語句:

SELECT * FROM user WHERE name LIKE ';[^張李王]三';
將找出不姓“張”、“李”、“王”的“趙三”、“孫三”等;
SELECT * FROM user WHERE name LIKE ';老[^1-4]';
將排除“老1”到“老4”尋找“老5”、“老6”、……、“老9”。

!最後是重點!

由於通配符的緣故,導致我們查詢特殊字符“%”、“_”、“[”、“';”的語句無法正常實現,而把特殊字符用“[ ]”括起便可正常查詢。據此我們寫出以下函數:

function sqlencode(str)
str=replace(str,"';","';';")
str=replace(str,"[","[[]") ';此句一定要在最先
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function

 

copyright © 萬盛學電腦網 all rights reserved