MySQL 字符串模式匹配 擴(kuò)展正則表達(dá)式模式匹配
標(biāo)準(zhǔn)的SQL模式匹配
SQL的模式匹配允許你使用“_”匹配任何單個(gè)字符,而“%”匹配任意數(shù)目字符(包括零個(gè)字符)。在 MySQL中,SQL的模式缺省是忽略大小寫(xiě)的。下面顯示一些例子。注意在你使用SQL模式時(shí),你不能使用=或!=;而使用LIKE或NOT LIKE比較操作符。
例如,在表pet中,為了找出以“b”開(kāi)頭的名字:
mysql> SELECT * FROM pet WHERE name LIKE "b%"; |
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
為了找出以“fy”結(jié)尾的名字:
mysql> SELECT * FROM pet WHERE name LIKE "%fy"; |
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
為了找出包含一個(gè)“w”的名字:
mysql> SELECT * FROM pet WHERE name LIKE "%w%"; |
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
為了找出包含正好5個(gè)字符的名字,使用“_”模式字符:
mysql> SELECT * FROM pet WHERE name LIKE "_____"; |
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
MySQL提供標(biāo)準(zhǔn)的SQL模式匹配,以及一種基于象Unix實(shí)用程序如vi、grep和sed的擴(kuò)展正則表達(dá)式模式匹配的格式。
擴(kuò)展正則表達(dá)式模式匹配
由MySQL提供的模式匹配的其他類(lèi)型是使用擴(kuò)展正則表達(dá)式。當(dāng)你對(duì)這類(lèi)模式進(jìn)行匹配測(cè)試時(shí),使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它們是同義詞)。
擴(kuò)展正則表達(dá)式的一些字符是:
“.”匹配任何單個(gè)的字符。
一個(gè)字符類(lèi)“[...]”匹配在方括號(hào)內(nèi)的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。為了命名字符的一個(gè)范圍,使用一個(gè)“-”。
“[a-z]”匹配任何小寫(xiě)字母,而“[0-9]”匹配任何數(shù)字。
“ * ”匹配零個(gè)或多個(gè)在它前面的東西。例如,“x*”匹配任何數(shù)量的“x”字符,“[0-9]*”匹配的任何數(shù)量的數(shù)字,而“.*”匹配任何數(shù)量的任何東西。
正則表達(dá)式是區(qū)分大小寫(xiě)的,但是如果你希望,你能使用一個(gè)字符類(lèi)匹配兩種寫(xiě)法。例如,“[aA]”匹配小寫(xiě)或大寫(xiě)的“a”而“[a-zA-Z]”匹配兩種寫(xiě)法的任何字母。
如果它出現(xiàn)在被測(cè)試值的任何地方,模式就匹配(只要他們匹配整個(gè)值,SQL模式匹配)。
為了定位一個(gè)模式以便它必須匹配被測(cè)試值的開(kāi)始或結(jié)尾,在模式開(kāi)始處使用“^”或在模式的結(jié)尾用“$”。
為了說(shuō)明擴(kuò)展正則表達(dá)式如何工作,上面所示的LIKE查詢(xún)?cè)谙旅媸褂肦EGEXP重寫(xiě):
為了找出以“b”開(kāi)頭的名字,使用“^”匹配名字的開(kāi)始并且“[bB]”匹配小寫(xiě)或大寫(xiě)的“b”:
mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]"; |
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
為了找出以“fy”結(jié)尾的名字,使用“$”匹配名字的結(jié)尾:
mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
為了找出包含一個(gè)“w”的名字,使用“[wW]”匹配小寫(xiě)或大寫(xiě)的“w”:
mysql> SELECT * FROM pet WHERE name REGEXP "[wW]"; |
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
既然如果一個(gè)正規(guī)表達(dá)式出現(xiàn)在值的任何地方,其模式匹配了,就不必再先前的查詢(xún)中在模式的兩方面放置一個(gè)通配符以使得它匹配整個(gè)值,
就像如果你使用了一個(gè)SQL模式那樣。
為了找出包含正好5個(gè)字符的名字,使用“^”和“$”匹配名字的開(kāi)始和結(jié)尾,和5個(gè)“.”實(shí)例在兩者之間:
mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
你也可以使用“{n}”“重復(fù)n次”操作符重寫(xiě)先前的查詢(xún):
mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
總結(jié)
本介紹了有關(guān)字符串模式匹配的有關(guān)知識(shí)。標(biāo)準(zhǔn)的SQL模式匹配是SQL語(yǔ)言的標(biāo)準(zhǔn),可以被其它關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)接受。擴(kuò)展正規(guī)表達(dá)式模式匹配
是根據(jù)Unix系統(tǒng)的標(biāo)準(zhǔn)開(kāi)發(fā)了,一般只可使用在MySQL上,但是其功能要比標(biāo)準(zhǔn)的SQL模式匹配更強(qiáng)。
相關(guān)文章
Sql查詢(xún)MySql數(shù)據(jù)庫(kù)中的表名和描述表中字段(列)信息
這篇文章主要介紹了Sql查詢(xún)獲取MySql數(shù)據(jù)庫(kù)中的表名和描述表中列名數(shù)據(jù)類(lèi)型,長(zhǎng)度,精度,是否可以為null,默認(rèn)值,是否自增,是否是主鍵,列描述等列信息2017-12-12
一步步教你如何使用mysql?binlog恢復(fù)數(shù)據(jù)
Binlog日志即binary?log,是二進(jìn)制日志文件,有兩個(gè)作用,一個(gè)是增量備份,另一個(gè)是主從復(fù)制,下面這篇文章主要給大家介紹了關(guān)于如何使用mysql?binlog?恢復(fù)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2023-04-04
常見(jiàn)的十種SQL語(yǔ)句性能優(yōu)化策略詳解
這篇文章主要介紹了常見(jiàn)的十種SQL語(yǔ)句性能優(yōu)化策略詳解,SQL語(yǔ)句性能優(yōu)化是提高數(shù)據(jù)庫(kù)查詢(xún)效率的關(guān)鍵步驟,可以減少查詢(xún)時(shí)間,提高系統(tǒng)響應(yīng)速度,本文將介紹一些常見(jiàn)的SQL語(yǔ)句性能優(yōu)化技巧,包括索引的使用、合理的查詢(xún)條件、避免全表掃描等,需要的朋友可以參考下2023-10-10
MySQL?中的?SQL_MODE?設(shè)置方法ANSI_QUOTES?選項(xiàng)解析與應(yīng)用小結(jié)
sql_mode是?MySQL?中的一個(gè)系統(tǒng)變量,用于控制?SQL?語(yǔ)句的解析和執(zhí)行方式,它由多個(gè)選項(xiàng)組成,每個(gè)選項(xiàng)都可以獨(dú)立設(shè)置,以滿(mǎn)足不同的應(yīng)用場(chǎng)景需求,這篇文章主要介紹了MySQL?中的?SQL_MODE?設(shè)置:ANSI_QUOTES?選項(xiàng)解析與應(yīng)用2024-12-12
重新restore了mysql到另一臺(tái)機(jī)器上后mysql 編碼問(wèn)題報(bào)錯(cuò)
重新restore了mysql到另一臺(tái)機(jī)器上,今天新寫(xiě)了一個(gè)app,發(fā)現(xiàn)在admin界面下一添加漢字就會(huì)報(bào)錯(cuò)2011-12-12
Spring中的InitializingBean和SmartInitializingSingleton的區(qū)別詳解
這篇文章主要介紹了Spring中的InitializingBean和SmartInitializingSingleton的區(qū)別詳解,InitializingBean只有一個(gè)接口方法afterPropertiesSet(),在BeanFactory初始化完這個(gè)bean,并且把bean的參數(shù)都注入成功后調(diào)用一次afterPropertiesSet()方法,需要的朋友可以參考下2024-01-01
mysql數(shù)據(jù)庫(kù)優(yōu)化必會(huì)的幾個(gè)參數(shù)中文解釋
對(duì)于自己配置mysql數(shù)據(jù)庫(kù)的朋友,需要注意的幾點(diǎn),下面都是英文的解釋?zhuān)容^易懂方便和我一樣需要優(yōu)化配置mysql的朋友2008-09-09
Mysql慢查詢(xún)?nèi)罩疚募D(zhuǎn)Excel的方法
面對(duì)公司生產(chǎn)環(huán)境中慢SQL問(wèn)題的排查工作,由于日志文件格式混亂,相關(guān)資料無(wú)法提供便捷的格式化處理工具,故而自主編寫(xiě)一套Java讀取慢SQL日志轉(zhuǎn)為Excel的小工具,該工具可以有效提升排查工作的效率,方便快捷地解決問(wèn)題2024-10-10
MYSQL METADATA LOCK(MDL LOCK) 理論及加鎖類(lèi)型測(cè)試
這篇文章主要介紹了MYSQL METADATA LOCK(MDL LOCK)的內(nèi)容,有理論知識(shí)和加鎖類(lèi)型測(cè)試的以下代碼,感興趣的朋友請(qǐng)參考下午文2021-09-09

