MySQL使用正則表達(dá)式去檢索指定數(shù)據(jù)庫(kù)字段
使用MySQL正則表達(dá)式
基本字符匹配
例:檢索列prod_name 包含文本1000的所有行。
SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;

??REGEXP告訴MySQL,它后面跟著的是正則表達(dá)式。
SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;

??這個(gè) . 可以說(shuō)是正則表達(dá)式的一部分用途了。它表示匹配任一一個(gè)字符。
LIKE 和 REGEXP的區(qū)別:
- LIKE是匹配整個(gè)列,完全一樣或者帶通配符才可以匹配成功
- REGEXP是只要列中包含文本就可以匹配成功。當(dāng)然REGEXP也可以匹配整個(gè)列值。
區(qū)分大小寫:
- 正則表達(dá)式的匹配是不區(qū)分大小寫的。為區(qū)分大小寫可使用BINARY關(guān)鍵字。
- 如:WHERE prod_name REGEXP BINARY 'JetPack .000'
進(jìn)行OR匹配
使用符號(hào) |:
SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;

匹配幾個(gè)字符串之一
如果你只想匹配特定的字符,可以通過(guò)指定一組用 [ ] 括起來(lái)的字符完成。
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;

上面這個(gè)結(jié)果,還想說(shuō)明一個(gè)問(wèn)題,就是REGEXP雖然是可以匹配尾巴和頭部的空格,但是你在單引號(hào)之間的空格還是需要你自己寫上去的,單引號(hào)之間的空格你不寫可是匹配不到結(jié)果的。
如上面結(jié)果所示,[]其實(shí)就是另一種方式的or語(yǔ)句,【123】其實(shí)也就是【1|2|3】。當(dāng)然你寫后者也是沒(méi)有任何問(wèn)題的。
下面我們?cè)倏匆粋€(gè)例子:
SELECT prod_name FROM products WHERE prod_name REGEXP '1|2|3 Ton' ORDER BY prod_name;

從結(jié)果上我們不難看出,你不用【】括起來(lái),MySQL就會(huì)理解為1or2or3 Ton這樣的形式
而下面那三行能匹配到也就是因?yàn)槔锩嬗?or2。
??字符集也可以被否定:[ ^123 ]的意思就是匹配除了這些以外的任何東西。
這個(gè) ^ 在【】括號(hào)里,就是除了的1,2,3,的意思,但是如果沒(méi)有【】,那就是定位符是文本的開(kāi)始位置的意思。
你比如說(shuō)下面這兩結(jié)果就是一樣的:


你再看一個(gè)理解定位符^

當(dāng)時(shí)我有一個(gè)這樣的例子不明白,后來(lái)想明白了。

上面這個(gè)當(dāng)時(shí)我就不明白,為什么都不包含1了,紅框里還有,這就是REGEXP,你不包含1or2or3.你有其他的元素呀,所以你就得顯示出來(lái)。
匹配范圍
集合可以用來(lái)定義要匹配的一個(gè)或者多個(gè)字符。
例如:下面的集合將匹配數(shù)字0到9
【0123456789】
為了簡(jiǎn)化這種類型的集合,可使用 - 來(lái)定義一個(gè)范圍。
【0-9】
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;

匹配特殊字符
也就是轉(zhuǎn)義。我們要匹配特殊字符必須用\為前導(dǎo)。
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\.' ORDER BY vend_name;

??多數(shù)的正則表達(dá)式實(shí)現(xiàn)使用單個(gè)反斜杠轉(zhuǎn)義特殊字符,以便能使用這些字符本身。但是mysql要求兩個(gè)反斜杠(mysql自己解釋一個(gè),正則表達(dá)式庫(kù)解釋一個(gè))。
匹配字符類
存在找出你自己經(jīng)常使用的數(shù)字,所有字母字符或所有數(shù)字字母字符等的匹配。為方便工作,可以使用預(yù)定義的字符集,稱為字符類。
| 類 | 說(shuō)明 |
|---|---|
| 【:alnum:】 | 任意字母和數(shù)字(同【a-zA-Z0-9】) |
| 【:alpha:】 | 任意字符【a-zA-Z】 |
| 【:blank:】 | 空格和制表【\t】 |
| [:cntrl:] | ASCII控制字符(ASCII0到31和127) |
| 【:digit:】 | 任意數(shù)字(【0-9】) |
| 【:graph:】 | 與【:print:】相同,但不包括空格 |
| 【:lower:】 | 任意小寫字母【a-z】 |
| 【:print:】 | 任意可打印字符 |
| 【:punct:】 | 既不在【:alnum:】也不在【:cntrl:】中的任意字符 |
| 【:space:】 | 包括空格在內(nèi)的任意空白符(同【\f\n\r\t\v】) |
| [:upper:] | 任意大寫字母【A-Z】 |
| 【:xdigit:】 | 任意十六進(jìn)制數(shù)字(同【a-fA-F0-9】) |
匹配多個(gè)實(shí)例
重復(fù)元字符
| 元字符 | 說(shuō)明 |
|---|---|
| * | 0個(gè)或者多個(gè)匹配 |
| + | 1個(gè)或多個(gè)匹配(等于{1,}) |
| ? | 0個(gè)或1個(gè)匹配(等于{0,1}) |
| {n} | 指定數(shù)目的匹配 |
| {n,} | 不少于指定數(shù)目的匹配 |
| {n,m} | 匹配數(shù)目的范圍 |
SELECT prod_name FROM products WHERE prod_name REGEXP '\([0-9] sticks?\)' ORDER BY prod_name;

??我覺(jué)得難理解的點(diǎn)就在于,那個(gè)?的匹配(s后的?使s可選,因?yàn)椋科ヅ渌懊娴牡娜魏巫址?次或者1次)。這也就是會(huì)有第一條結(jié)果的原因。
例:匹配連在一起的的4位數(shù)字。
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_name;
定位符
之前的例子都是匹配任一一個(gè)串中任意位置的文本。為了匹配特定位置的文本,我們需要使用定位符。
| 元字符 | 說(shuō)明 |
|---|---|
| ^ | 文本的開(kāi)始 |
| $ | 文本的結(jié)束 |
| [[:<:]] | 詞的開(kāi)始 |
| [[:>:]] | 詞的結(jié)束 |
例:找一個(gè)以數(shù)或小數(shù)點(diǎn)開(kāi)始的所有產(chǎn)品
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\.]' ORDER BY prod_name;

到此這篇關(guān)于MySQL使用正則表達(dá)式去檢索指定數(shù)據(jù)庫(kù)字段的文章就介紹到這了,更多相關(guān)MySQL檢索數(shù)據(jù)庫(kù)字段內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫(kù)主從同步實(shí)戰(zhàn)過(guò)程詳解
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)主從同步,結(jié)合實(shí)例形式詳細(xì)分析了MySQL數(shù)據(jù)庫(kù)主從同步基本配置方法與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05
使用mysqld_multi實(shí)現(xiàn)單系統(tǒng)中配置多個(gè)MySQL服務(wù)器實(shí)例
這篇文章主要介紹了使用mysqld_multi實(shí)現(xiàn)單系統(tǒng)中配置多個(gè)MySQL服務(wù)器實(shí)例,mysqld_multi可用于在一臺(tái)物理服務(wù)器運(yùn)行多個(gè)Mysql服務(wù),mysqld_multi是管理多個(gè)mysqld的服務(wù)進(jìn)程,這些服務(wù)進(jìn)程程序不同的unix socket或是監(jiān)聽(tīng)于不同的端口,需要的朋友可以參考下2014-09-09
iOS開(kāi)發(fā)runloop運(yùn)行循環(huán)機(jī)制學(xué)習(xí)
這篇文章主要為大家介紹了iOS開(kāi)發(fā)runloop運(yùn)行循環(huán)的機(jī)制學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Keepalived+HAProxy實(shí)現(xiàn)MySQL高可用負(fù)載均衡的配置
這篇文章主要介紹了keepalived+haproxy實(shí)現(xiàn)MySQL高可用負(fù)載均衡的配置方法,通過(guò)這兩個(gè)軟件可以有效地使MySQL脫離故障及進(jìn)行健康檢測(cè),需要的朋友可以參考下2016-02-02
mysql通過(guò)group?by分組取最大時(shí)間對(duì)應(yīng)數(shù)據(jù)的兩種有效方法
日常開(kāi)發(fā)當(dāng)中,經(jīng)常會(huì)遇到查詢分組數(shù)據(jù)中指定的記錄,下面這篇文章主要給大家介紹了關(guān)于mysql通過(guò)group?by分組取最大時(shí)間對(duì)應(yīng)數(shù)據(jù)的兩種有效方法,文章通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09

