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

MySQL 字串模式比對:LIKE 與 REGEXP 完整教學

     編輯:MySQL 綜合教學

兩種模式比對機制

特性SQL 標準模式 (LIKE)擴展正則表達式 (REGEXP)
操作符LIKE / NOT LIKEREGEXP / NOT REGEXP (RLIKE)
大小寫敏感預設不敏感敏感
比對範圍必須匹配整個值值中任意位置匹配即可
萬用字元_ (單字元), % (任意字元). (單字元), * (零或多), + (一或多), ? (零或一)
字元類別不支援[abc], [a-z], [0-9]
錨點無^ (開頭), $ (結尾)
分組/選擇無(...), |
量詞無{n}, {n,}, {n,m}

LIKE 實戰範例

-- 以 b 開頭
SELECT * FROM pet WHERE name LIKE 'b%';
-- 以 fy 結尾
SELECT * FROM pet WHERE name LIKE '%fy';
-- 包含 w
SELECT * FROM pet WHERE name LIKE '%w%';
-- 正好 5 個字元
SELECT * FROM pet WHERE name LIKE '_____';

若需大小寫敏感:LIKE BINARY 'b%' 或 COLLATE utf8_bin。

REGEXP 實戰範例

-- 以 b 或 B 開頭
SELECT * FROM pet WHERE name REGEXP '^[bB]';
-- 以 fy 結尾
SELECT * FROM pet WHERE name REGEXP 'fy$';
-- 包含 w 或 W
SELECT * FROM pet WHERE name REGEXP '[wW]';
-- 正好 5 個字元
SELECT * FROM pet WHERE name REGEXP '^.....$';
-- 或使用量詞
SELECT * FROM pet WHERE name REGEXP '^.{5}$';

進階 REGEXP 技巧

  • 字元類別:[a-zA-Z0-9]、[[:alnum:]]、[[:space:]] 等 POSIX 類別。
  • 分組與回溯參考:(ab)+、\\1。
  • 邊界:[[:<:]](字首)、[[:>:]](字尾)。
  • 效能提示:REGEXP 無法使用索引(除非固定前綴 ^abc),大表慎用;優先考慮 LIKE + 全文索引或應用層處理。

常見陷阱與最佳實務

  1. LIKE 以 % 開頭(%abc)無法使用索引,導致全表掃描。
  2. REGEXP 預設大小寫敏感,需用字元類別 [aA] 處理不敏感比對。
  3. 儲存引擎差異:MyISAM/InnoDB 均支援,但全文索引(MATCH...AGAINST)對自然語言搜尋更高效。
  4. 資料清洗時,結合 REPLACE()、TRIM()、REGEXP 於 UPDATE 中批次修正。

結語

LIKE 簡單高效、支援索引(固定前綴),適合前綴/後綴/包含查詢;REGEXP 功能強大、語法豐富,適合複雜格式驗證、資料清洗。根據場景選擇正確工具,並注意效能影響,是 SQL 開發的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved