標籤:style blog http color os 使用 io strong ar
MySQL 萬用字元
SQL的模式比對同意你使用“_”匹配不論什麼單個字元,而“%”匹配隨意數目字元(包含零個字元)。在 MySQL中,SQL的模式預設是忽略大寫和小寫。以下顯示一些範例。
注意在你使用SQL模式時,你不能使用=或!=;而使用LIKE或NOT LIKE比較操作符。
為了找出以“b”開頭的名字:
mysql> SELECT * FROM pet WHEREname 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 WHEREname 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 WHEREname 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 WHEREname 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 WHEREname 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 WHEREname 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 WHEREname 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 WHEREname 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 WHEREname 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
=====================================================================
MySQL 萬用字元學習小結