SQL中LIKE模糊查詢與REGEXP用法說明

最近在優化WordPress數據庫的時候,對一些問題通常都是通過搜索來尋求答案,不過在這期間,大多數的WordPress都用到了模糊查詢來進行數據庫的操作,現在小覺就其中的LIKE模糊查詢與REGEXP各種用法及對特殊字符進行記錄。


首先說下LIKE命令都涉及到的通配符:

% 替代一個或多個字符
_ 僅替代一個字符
[charlist] 字符列中的任何單一字符
[^charlist]或者[!charlist] 不在字符列中的任何單一字符


其中搭配以上通配符可以讓LIKE命令實現多種技巧:

1、LIKE'Mc%' 將搜索以字母 Mc 開頭的所有字符串(如 McBadden)。
2、LIKE'%inger' 將搜索以字母 inger 結尾的所有字符串(如 Ringer、Stringer)。
3、LIKE'%en%' 將搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
4、LIKE'_heryl' 將搜索以字母 heryl 結尾的所有六個字母的名稱(如 Cheryl、Sheryl)。
5、LIKE'[CK]ars[eo]n' 將搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
6、LIKE'[M-Z]inger' 將搜索以字符串 inger 結尾、以從 M 到 Z 的任何單個字母開頭的所有名稱(如 Ringer)。
7、LIKE'M[^c]%' 將搜索以字母 M 開頭,並且第二個字母不是 c 的所有名稱(如MacFeather)。


然後是REGEXP命令涉及到的通配符:

“.”匹配任何單個的字符。
一個字符類“[...]”匹配在方括號內的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。爲了命名字符的一個範圍,使用一個“-”。“[a-z]”匹配任何小寫字母,而“[0-9]”匹配任何數字。
“ *
”匹配零個或多個在它前面的東西。例如,“x*”匹配任何數量的“x”字符,“[0-9]*”匹配的任何數量的數字,而“.*”匹配任何數量的任何東西。
正則表達式是區分大小寫的,但是如果你希望,你能使用一個字符類匹配兩種寫法。例如,“[aA]”匹配小寫或大寫的“a”而“[a-zA-Z]”匹配兩種寫法的任何字母。
如果它出現在被測試值的任何地方,模式就匹配(只要他們匹配整個值,SQL模式匹配)。
(直到寫到這裏,我才發現LIKE和REGEXP之間的區別,說白了就是模糊匹配和完全匹配之間的區別,同時也讓小覺明白在一些優化WordPress中的代碼中爲什麼選擇REGEXP而不是LIKE,總的來說小覺的目的達到了.)
爲了定位一個模式以便它必須匹配被測試值的開始或結尾,在模式開始處使用“^”或在模式的結尾用“$”。


其中搭配以上通配符可以讓REGEXP命令實現多種技巧:

1、爲了找出以“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 |
+--------+--------+---------+------+------------+------------+


2、爲了找出以“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 |
+--------+--------+---------+------+------------+-------+


3、爲了找出包含一個“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 Like
的特殊字符的,但是搞來搞去,小覺自己都看不懂,所以就不寫了,畢竟不是專門的數據庫管理人員,一些基礎的瞭解下就可以了。

參考頁面:http://www.111cn.net/database/mssqlserver/44138.htm


原文鏈接:http://www.zhugexiaojue.com/note/likeregexp-465.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章