首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 字串模式比對完全指南:LIKE 標準模式與 REGEXP 正則表達式

     編輯:MySQL 資料庫相關知識

標準 SQL 模式比對 (LIKE / NOT LIKE)

萬用字元含義範例匹配範例
%任意長度字串 (含空字串)name LIKE 'b%'Buffy, Bowser
_單一任意字元name LIKE '_____'Claws, Buffy (5 字元)
  • **預設不區分大小寫** (依定序 ci 結尾者)。
  • **不可使用 = / !=**,必須用 LIKE / NOT LIKE。

擴展正則表達式 (REGEXP / NOT REGEXP / RLIKE)

元字元含義範例
.任意單一字元name REGEXP '^...$' (3 字元)
[...]字元類別:括號內任一字元[abc] 匹配 a/b/c
-字元範圍 (用於 [] 內)[a-z] 小寫字母, [0-9] 數字
*前一元素 0 次或多次x* 任意多 x, [0-9]* 任意多數字
^字串開頭錨點^[bB] 以 b/B 開頭
$字串結尾錨點fy$ 以 fy 結尾
{n}前一元素重複 n 次^.{5}$ = ^.....$ (5 字元)

關鍵差異:REGEXP vs LIKE

  • REGEXP 預設區分大小寫,需用字元類別 [aA] 或 [a-zA-Z] 達成不區分。
  • REGEXP 只要模式出現在值中任意位置即匹配** (除非用 ^/$ 鎖定);LIKE 需完整匹配整個值 (隱含 ^...$)。
  • REGEXP 功能更強 (量詞、分組、選擇、反向引用),但**非標準 SQL**,可移植性較差。

對照範例:相同查詢的 LIKE vs REGEXP 寫法

需求LIKEREGEXP
以 b/B 開頭name LIKE 'b%' (不區分大小寫)name REGEXP '^[bB]'
以 fy 結尾name LIKE '%fy'name REGEXP 'fy$'
含 w/Wname LIKE '%w%'name REGEXP '[wW]'
剛好 5 字元name LIKE '_____'name REGEXP '^.....$' 或 '^.{5}$'

效能建議

  1. **前綴匹配** (LIKE 'abc%') 可使用索引 (範圍掃描)。
  2. **前導萬用字元** (LIKE '%abc', LIKE '%abc%') **無法使用索引**,全表掃描。
  3. REGEXP **幾乎永遠無法使用索引** (MySQL 8.0 始支援部分 REGEXP 索引下推),慎用於大表。
  4. 全文搜尋需求請用 **Fulltext Index** (MATCH() AGAINST())。

總結選擇指南

  • 簡單前綴/後綴/固定長度 → **LIKE** (標準、可用索引、可移植)。
  • 複雜格式驗證 (Email、電話、IP、特定模式) → **REGEXP** (表達力強)。
  • 大量文字搜尋、自然語言 → **Fulltext Search**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved