MySQL 支持使用正則表達式進行復(fù)雜的字符串匹配,主要通過 REGEXP 或 RLIKE 操作符(兩者功能相同)實現(xiàn)。正則表達式可以用于靈活地查找、篩選符合特定模式的字符串。
SELECT 列名 FROM 表名 WHERE 列名 REGEXP '正則表達式';
-
REGEXP 匹配時不區(qū)分大小寫(若需區(qū)分,可使用 REGEXP BINARY)。
-
若要反向匹配(不符合模式的結(jié)果),使用
NOT REGEXP。
假設(shè)有一張 users 表,包含 username 字段,以下是常見查詢場景:
-
匹配以 "a" 開頭的用戶名:
SELECT username FROM users WHERE username REGEXP '^a';
-
匹配以 "er" 結(jié)尾的用戶名:
SELECT username FROM users WHERE username REGEXP 'er$';
-
匹配包含 "ab" 或 "cd" 的用戶名:
SELECT username FROM users WHERE username REGEXP 'ab|cd';
-
匹配包含數(shù)字的用戶名:
SELECT username FROM users WHERE username REGEXP '[0-9]';
SELECT username FROM users WHERE username REGEXP '[[:digit:]]';
-
匹配長度為 3 的用戶名(由字母組成):
SELECT username FROM users WHERE username REGEXP '^[a-zA-Z]{3}$';
-
區(qū)分大小寫匹配(僅匹配大寫 "A" 開頭的用戶名):
SELECT username FROM users WHERE username REGEXP BINARY '^A';
-
匹配郵箱格式(簡單校驗):
SELECT email FROM users
WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
-
性能問題:正則表達式匹配可能比普通字符串匹配(如
LIKE)更消耗性能,尤其是在大數(shù)據(jù)量的表中,建議結(jié)合索引使用。
-
與
LIKE 的區(qū)別:LIKE 僅支持簡單通配符(% 和 _),而正則表達式支持更復(fù)雜的模式匹配。
-
版本差異:MySQL 8.0 對正則表達式的支持更完善(如支持
\d 表示數(shù)字),低版本可能需要使用 [0-9] 等兼容寫法。
通過正則表達式,MySQL 可以實現(xiàn)靈活的字符串篩選,適用于數(shù)據(jù)清洗、格式校驗等場景。