mysql正則表達(dá)式(regexp和rlike)的搜索功能實(shí)例分析
本文實(shí)例講述了mysql正則表達(dá)式(regexp和rlike)的搜索功能。分享給大家供大家參考,具體如下:
我們知道正則表達(dá)式是描述搜索模式的特殊字符串。 它是一個(gè)強(qiáng)大的工具,為我們提供一種簡(jiǎn)潔靈活的方法來(lái)識(shí)別基于模式的文本字符,例如字符,單詞等。例如,我們可以使用正則表達(dá)式來(lái)搜索電子郵件,IP地址,電話號(hào)碼,社會(huì)安全號(hào)碼或具有特定模式的任何內(nèi)容。正則表達(dá)式可以由正則表達(dá)式處理器解釋的自己的語(yǔ)法,正則表達(dá)式廣泛應(yīng)用于從編程語(yǔ)言到數(shù)據(jù)庫(kù)(包括MySQL)大部分平臺(tái)。使用正則表達(dá)式的優(yōu)點(diǎn)是,不限于在like運(yùn)算符中基于具有百分號(hào)(%)和下劃線(_)的固定模式搜索字符串。 使用正則表達(dá)式,有更多的元字符來(lái)構(gòu)造靈活的模式。
了解了這些我們是不是想要來(lái)試試水呢???廢話不多說(shuō),MySQL允許使用REGEXP運(yùn)算符在SQL語(yǔ)句中匹配模式,所以,我們來(lái)看下,正則再where子句中的語(yǔ)法格式:
SELECT column_list FROM table_name WHERE string_column REGEXP pattern;
這條sql中執(zhí)行string_column與模式pattern匹配,如果string_column中的值與模式pattern匹配,則WHERE子句中的表達(dá)式將返回1,否則返回0。如果string_column或pattern為NULL,則結(jié)果為NULL。除了REGEXP運(yùn)算符之外,可以使用RLIKE運(yùn)算符,這是REGEXP運(yùn)算符的同義詞。其中,REGEXP運(yùn)算符的否定形式是NOT REGEXP。
完事我們來(lái)看個(gè)實(shí)例哈,假設(shè)想找出名字以字母A,B或C開(kāi)頭的產(chǎn)品。可以使用select語(yǔ)句中的正則表達(dá)式如下:
SELECT productname FROM products WHERE productname REGEXP '^(A|B|C)' ORDER BY productname;
執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果:
+--------------------------------+ | productname | +--------------------------------+ | America West Airlines B757-200 | | American Airlines: B767-300 | | American Airlines: MD-11S | | ATA: B757-300 | | Boeing X-32A JSF | | Collectable Wooden Train | | Corsair F4U ( Bird Cage) | +--------------------------------+ 7 rows in set
該模式允許查詢名稱以A,B或C開(kāi)頭的產(chǎn)品,其中字符^表示從字符串的開(kāi)頭匹配,完事字符|如果無(wú)法匹配,則搜索替代方法。下表說(shuō)明了正則表達(dá)式中一些常用的元字符和構(gòu)造:
| 元字符 | 行為 |
|---|---|
| ^ | 匹配搜索字符串開(kāi)頭處的位置 |
| $ | 匹配搜索字符串末尾的位置 |
| . | 匹配任何單個(gè)字符 |
| […] | 匹配方括號(hào)內(nèi)的任何字符 |
| [^…] | 匹配方括號(hào)內(nèi)未指定的任何字符 |
![]() |
匹配p1或p2模式 |
| * | 匹配前面的字符零次或多次 |
| + | 匹配前一個(gè)字符一次或多次 |
| {n} | 匹配前幾個(gè)字符的n個(gè)實(shí)例 |
| {m,n} | 從m到n個(gè)前一個(gè)字符的實(shí)例匹配 |
我們?cè)賮?lái)查找名稱以a開(kāi)頭的產(chǎn)品,我們?cè)诿Q開(kāi)頭使用“^”進(jìn)行匹配,如下查詢語(yǔ)句:
SELECT productname FROM products WHERE productname REGEXP '^a';
執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果:
+--------------------------------+ | productname | +--------------------------------+ | American Airlines: B767-300 | | America West Airlines B757-200 | | ATA: B757-300 | | American Airlines: MD-11S | +--------------------------------+ 4 rows in set
如果要使REGEXP運(yùn)算符以區(qū)分大小寫(xiě)的方式比較字符串,可以使用BINARY運(yùn)算符將字符串轉(zhuǎn)換為二進(jìn)制字符串。因?yàn)镸ySQL比較二進(jìn)制字節(jié)逐字節(jié)而不是逐字符。 這允許字符串比較區(qū)分大小寫(xiě)。例如,以下語(yǔ)句只匹配開(kāi)頭為大寫(xiě)“C”的產(chǎn)品名稱:
SELECT productname FROM products WHERE productname REGEXP BINARY '^C';
執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果:
+--------------------------+ | productname | +--------------------------+ | Collectable Wooden Train | | Corsair F4U ( Bird Cage) | +--------------------------+ 2 rows in set
要找到以f結(jié)尾的產(chǎn)品,我們可以使用'$f‘來(lái)匹配字符串的末尾:
SELECT productname FROM products WHERE productname REGEXP 'f$';
執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果:
+------------------+ | productname | +------------------+ | Boeing X-32A JSF | +------------------+ 1 row in set
要查找其名稱包含“ford”的產(chǎn)品,就要使用以下查詢:
SELECT productname FROM products WHERE productname REGEXP 'ford';
執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果:
+----------------------------------+ | productname | +----------------------------------+ | 1968 Ford Mustang | | 1969 Ford Falcon | | 1940 Ford Pickup Truck | | 1911 Ford Town Car | | 1932 Model A Ford J-Coupe | | 1926 Ford Fire Engine | | 1913 Ford Model T Speedster | | 1934 Ford V8 Coupe | | 1903 Ford Model A | | 1976 Ford Gran Torino | | 1940s Ford truck | | 1957 Ford Thunderbird | | 1912 Ford Model T Delivery Wagon | | 1940 Ford Delivery Sedan | | 1928 Ford Phaeton Deluxe | +----------------------------------+ 15 rows in set
要查找名稱只包含10個(gè)字符的產(chǎn)品,可以使用'^‘和'$‘來(lái)匹配產(chǎn)品名稱的開(kāi)頭和結(jié)尾,并重復(fù){10}次任何字符.,作為以下查詢:
SELECT
productname
FROM
products
WHERE
productname REGEXP '^.{10}$';
執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果:
+-------------+ | productname | +-------------+ | HMS Bounty | | Pont Yacht | +-------------+ 2 rows in set
其實(shí)吧,這個(gè)查詢方式是固定的,可變的是你寫(xiě)的正則,所以具體咋用,就要看各位小伙伴的能力了哦。
好啦,今天就到這里了。
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測(cè)試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》及《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。
相關(guān)文章
mysql分頁(yè)原理和高效率的mysql分頁(yè)查詢語(yǔ)句
這篇文章主要介紹了mysql分頁(yè)原理和高效率的mysql分頁(yè)查詢語(yǔ)句,大家參考使用吧2014-01-01
解決Mysql服務(wù)器啟動(dòng)時(shí)報(bào)錯(cuò)問(wèn)題的方法
這篇文章主要介紹了解決Mysql服務(wù)器啟動(dòng)時(shí)報(bào)錯(cuò)問(wèn)題的方法,需要的朋友可以參考下2015-11-11
Windows環(huán)境MySQL全量備份+增量備份的實(shí)現(xiàn)
本文主要介紹了Windows環(huán)境MySQL全量備份+增量備份的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
分析MySQL中索引引引發(fā)的CPU負(fù)載飆升的問(wèn)題
這篇文章主要介紹了分析MySQL中索引引引發(fā)的CPU負(fù)載飆升的問(wèn)題,文中提到了獨(dú)立索引所帶來(lái)的巨大CPU負(fù)擔(dān),以提醒在MySQL中使用索引要注意CPU負(fù)載的問(wèn)題,需要的朋友可以參考下2015-05-05
MySQL insert 記錄后查詢亂碼問(wèn)題解決方法
文章通過(guò)分析一個(gè)MySQL插入數(shù)據(jù)后查詢亂碼的問(wèn)題,探討了亂碼的原因,并提出了解決方法,問(wèn)題的根本原因是MySQL客戶端和服務(wù)器之間的字符集不一致,導(dǎo)致插入的中文字符被錯(cuò)誤解碼為亂碼,感興趣的朋友跟隨小編一起看看吧2024-11-11


