mysql 匹配字元 MySQL中的字串模式匹配

2021-10-17 12:42:50 字數 3879 閱讀 9973

mysql提供標準的sql模式匹配,以及一種基於象unix實用程式如vi、grep和sed的擴充套件正規表示式模式匹配的格式。

標準的sql模式匹配

sql的模式匹配允許你使用「_」匹配任何單個字元,而「%」匹配任意數目字元(包括零個字元)。在 mysql中,sql的模式預設是忽略大小寫的。下面顯示一些例子。注意在你使用sql模式時,你不能使用=或!=;而使用like或not like比較操作符。

例如,在表pet中,為了找出以「b」開頭的名字:

mysql> select * from pet where name like "b%";

| name   | owner  | species | ***  | 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 | ***  | 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 | ***  | 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 | ***  | 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 | ***  | 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 | ***  | 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 | ***  | 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 | ***  | birth      | death |

| claws | gwen   | cat     | m    | 1994-03-17 | null  |

| buffy | harold | dog     | f    | 1989-05-13 | null  |

你也可以使用「」「重複n次」操作符重寫先前的查詢:

mysql> select * from pet where name regexp "^.$";

| name  | owner  | species | ***  | birth      | death |

| claws | gwen   | cat     | m    | 1994-03-17 | null  |

| buffy | harold | dog     | f    | 1989-05-13 | null  |

總結本介紹了有關字串模式匹配的有關知識。標準的sql模式匹配是sql語言的標準,可以被其它關係資料庫系統接受。擴充套件正規表示式模式匹配

是根據unix系統的標準開發了,一般只可使用在mysql上,但是其功能要比標準的sql模式匹配更強。

mysql中的字元匹配查詢

1 like 的字元匹配 1 百分號萬用字元,匹配任意長度的字元,包括零字元 2 下劃線萬用字元,只匹配乙個字元 2 正規表示式查詢 regexp 選項 說明例子示例 匹配文字的開始字元 b 匹配以字母 b開頭的字串 book,big,banana,bike 匹配文字的結束字元 st 匹配以st 結...

mysql 匹配字元類 MySQL正則匹配字元類

我不懂mysql中匹配字元類到底怎麼理解?upper 表示任意大寫字母,同 a z 通過下面這一句得到出現過大寫字母的prod name select prod name from products where prod name regexp upper 使用 upper 則會全部輸出。同樣的道理...

Mysql中的LIKE用法字元匹配

首先建立這麼乙個表 1.搜尋以字元或者其他型別的資料開頭的記錄 問 我要查詢id中以2014開頭的記錄,應該怎麼辦?select id from demo where id like 2014 當然我們也可以同時顯示出name 2.搜尋包含字元或者其他型別的 問 我要查詢記錄中name 包含有 ma...