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

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