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

MySQL LIKE 與 REGEXP 模糊查詢實戰指南

     編輯:MySQL 資料庫相關知識

MySQL 模糊匹配:LIKE、REGEXP、FIND_IN_SET 完整用法

REGEXP 正則表達式

常用場景

-- 1. 找出含非 ASCII 可見字符的記錄
SELECT * FROM m_user WHERE emp_no REGEXP '[^ -~]' = 1;

-- 2. 找出完全不含英數字的記錄
SELECT * FROM table WHERE name NOT REGEXP '[a-zA-Z0-9]+';

-- 3. 逗號分隔字串中包含某 ID(配合邊界檢查)
SELECT * FROM linkinfo 
WHERE pingid REGEXP '[[:<:]]{id}[[:>:]]';  -- 詞邊界更精確

LIKE 模式匹配

MySQL 預設不區分大小寫。必須搭配 LIKE/NOT LIKE,不能用 =/!=。

四大通配符模式

符號含義範例匹配示例
%任意長度字符(含 0)LIKE '%三%'張三、張貓三、三腳貓、唐三藏
_單個任意字符LIKE '_三_'唐三藏(三字、中間是三)
[]字符集合(REGEXP專用)REGEXP '[abc]'含 a/b/c 任一
[^]排除字符集合REGEXP '[^0-9]'含非數字

多條件組合

-- 同時含「三」和「貓」
WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'

-- 以「三」開頭
WHERE u_name LIKE '三%'

-- 以「三」結尾
WHERE u_name LIKE '%三'

FIND_IN_SET

專門處理「逗號分隔字串」的集合查詢:

-- pingid = '1,2,3' 中查找 id=2
SELECT * FROM linkinfo WHERE FIND_IN_SET('2', pingid);
  • 效能優於 LIKE '%,2,%'(可用索引優化)
  • 注意:字串不能有空格,如 '1, 2, 3' 會失效

選擇建議

  • 簡單前綴/後綴/包含:LIKE(可走索引前綴)
  • 複雜模式、邊界匹配:REGEXP
  • 逗號分隔集合精確查找:FIND_IN_SET
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved