MySQL 通配符
?
SQL的模式匹配同意你使用“_”匹配不論什么單個(gè)字符,而“%”匹配隨意數(shù)目字符(包含零個(gè)字符)。在 MySQL中,SQL的模式缺省是忽略大寫和小寫的。以下顯示一些樣例。
注意在你使用SQL模式時(shí),你不能使用=或!=;而使用LIKE或NOT LIKE比較操作符。
?
為了找出以“b”開頭的名字:
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提供的模式匹配的其它類型是使用擴(kuò)展正則表達(dá)式。當(dāng)你對這類模式進(jìn)行匹配測試時(shí),使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它們是同義詞)。
?
擴(kuò)展正則表達(dá)式的一些字符是:
“.”匹配不論什么單個(gè)的字符。
一個(gè)字符類“
[...]
”匹配在方括號內(nèi)的不論什么字符。比如,“[abc]”匹配“a”、“b”或“c”。為了命名字符的一個(gè)范圍,使用一個(gè)
“-”。“[a-z
]
” 匹配不論什么小寫字母,而“[0-9]”匹配不論什么數(shù)字。
“
*
”匹配零個(gè)或多個(gè)在它前面的東西。比如,“x*”匹配不論什么數(shù)量的“x”字符,“[0-9]*”匹配的不論什么數(shù)量的數(shù)字,而“.*”匹配不論什么數(shù)量的不論什么東西。
正則表達(dá)式是區(qū)分大寫和小寫的,可是假設(shè)你希望,你能使用一個(gè)字符類匹配兩種寫法。比如,“[aA]”匹配小寫或大寫的“a”而“[a-zA-Z]”匹配兩種寫法的不論什么字母。
假設(shè)它出如今被測試值的不論什么地方,模式就匹配(僅僅要他們匹配整個(gè)值,SQL模式匹配)。
為了定位一個(gè)模式以便它必須匹配被測試值的開始或結(jié)尾,在模式開始處使用“^”或在模式的結(jié)尾用“$”。
為了說明擴(kuò)展正則表達(dá)式怎樣工作,上面所看到的的LIKE查詢在以下使用REGEXP重寫:
?
為了找出以“b”開頭的名字,使用“^”匹配名字的開始而且“[bB]”匹配小寫或大寫的“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]”匹配小寫或大寫的“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 |
+----------+-------+---------+------+------------+------------+
既然假設(shè)一個(gè)正規(guī)表達(dá)式出如今值的不論什么地方,其模式匹配了,就不必再先前的查詢中在模式的雙方面放置一個(gè)通配符以使得它匹配整個(gè)值,就像假設(shè)你使用了一個(gè)SQL模式那樣。
?
為了找出包括正好5個(gè)字符的名字,使用“^”和“$”匹配名字的開始和結(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次”操作符重寫先前的查詢:
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 |
+-------+--------+---------+------+------------+-------+
?
http://www.playhosts.com/bbs/read.php?tid=12357
=====================================================================
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
