SELECT * FROM table_name
WHERE column_name LIKE pattern;
專門用於字串型欄位的模糊比對,配合萬用字元可實現靈活的模式匹配。
| 匹配類型 | 符號 | 範例 | 說明 |
|---|---|---|---|
| 多字元 | % | %abc% | 包含 "abc" 的任意字串(標準 SQL,所有主流 DB 支援) |
| 多字元 | * | *abc* | Access/Jet 引擎專用,等同 %;兩端同時用 * 會匹配所有行 |
| 單字元 | _ | _abc | 標準 SQL,匹配任意單一字元 |
| 單字元 | ? | ?abc | Access/Jet 專用,等同 _ |
| 單一數字 | # | #abc | Access/Jet 專用,匹配 0-9 單一數字 |
| 字元範圍 | [a-z] | [a-f]bc | 匹配括號內任一字元 |
| 排除範圍 | [^a-z] 或 [!a-z] | [^0-9]bc | 匹配不在括號內的任一字元 |
% vs *標準 SQL 僅支援 %。在 Access/Jet 中:
LIKE '%明%' → 正確找出包含「明」的記錄。LIKE '*明*' → 會回傳所有記錄,因為 * 在兩端時語義異常。最佳實務:統一使用 % 作為多字元萬用字元,_ 作為單字元;僅在 Access 專案維護時被迫使用 */?,且避免兩端同時使用 *。
-- 1. 包含「明」
SELECT * FROM table1 WHERE name LIKE '%明%';
-- 2. 以「李」開頭
SELECT * FROM table1 WHERE name LIKE '李%';
-- 3. 含有數字
SELECT * FROM table1 WHERE name LIKE '%[0-9]%';
-- 4. 含有小寫字母
SELECT * FROM table1 WHERE name LIKE '%[a-z]%';
-- 5. 不含數字
SELECT * FROM table1 WHERE name LIKE '%[^0-9]%';
LIKE '關鍵字%'(前綴匹配)可使用索引;LIKE '%關鍵字%' 導致全表掃描。LIKE '%[%]%' ESCAPE '\' 匹配含 % 的字串。