首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL LIKE 模糊查詢與 REGEXP 正則查詢完整指南

     編輯:MySQL 綜合教學

一、LIKE 模式匹配(通配符)

通配符含義範例匹配範例
%任意長度字串(含 0 字元)WHERE name LIKE '%三%'張三、張貓三、三腳貓、唐三藏
_單一字元WHERE name LIKE '_三_'唐三藏(三字、中間是三)
_單一字元WHERE name LIKE '三__'三腳貓(三字、首字是三)

關鍵規則

  • 預設不區分大小寫(依字元集 Collation,如 utf8_general_ci)。
  • 必須用 LIKE / NOT LIKE,不能用 = / !=。
  • 多條件組合:WHERE name LIKE '%三%' AND name LIKE '%貓%'(同時包含「三」與「貓」)。WHERE name LIKE '%三%貓%' 僅匹配「三」在「貓」之前的字串。
  • 效能:前導 % 導致全表掃描(%三%),後導 %(三%)可用索引。

二、REGEXP 正則表達式(擴展正則)

元字元含義範例
.任意單一字元(單位元組)REGEXP 'a.c' 匹配 abc, axc
[...]字元類別[abc] 匹配 a/b/c;[a-z] 小寫字母;[0-9] 數字
*前面元素 0 次或多次x* 任意數量 x;.* 任意字串
^字串開頭^三 以「三」開頭
$字串結尾三$ 以「三」結尾
{n}前面元素恰好 n 次b{2}$ 以兩個 b 結尾
|或cat|dog 匹配 cat 或 dog

REGEXP 實戰範例

-- 以「三」開頭
SELECT * FROM user WHERE u_name REGEXP '^三';

-- 以「三」結尾
SELECT * FROM user WHERE u_name REGEXP '三$';

-- 包含數字
SELECT * FROM user WHERE u_name REGEXP '[0-9]';

-- 僅由字母組成
SELECT * FROM user WHERE u_name REGEXP '^[A-Za-z]+$';

LIKE vs REGEXP 選擇建議

  • 簡單前綴/後綴/包含匹配 → LIKE(可用索引、可讀性高)。
  • 複雜格式驗證(Email、手機號、身分證)、抽取、替換 → REGEXP / REGEXP_REPLACE(MySQL 8.0+)。
  • REGEXP 預設區分大小寫,不區分用 [aA] 或 LOWER(col) REGEXP ...。
  • REGEXP 無法利用普通 B-Tree 索引,全表掃描;大表慎用,考慮全文索引或應用層預處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved