一、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 索引,全表掃描;大表慎用,考慮全文索引或應用層預處理。