SQL 萬用字元 (Wildcards)
萬用字元是搭配 LIKE 運算子使用的特殊符號,用來建立搜尋模式。
萬用字元種類
| 萬用字元 | 說明 | 資料庫支援 |
|---|---|---|
% | 代表任意數量的字元(包括零個) | 全部 |
_ | 代表剛好一個字元 | 全部 |
[charlist] | 代表括號內任一字元 | SQL Server |
[^charlist] | 代表不在括號內的任一字元 | SQL Server |
% 萬用字元
代表零個、一個或多個字元:
-- 以「王」開頭
WHERE name LIKE '王%'
-- 符合:王、王小明、王大華
-- 以「明」結尾
WHERE name LIKE '%明'
-- 符合:小明、王小明、明
-- 包含「小」
WHERE name LIKE '%小%'
-- 符合:小明、王小明、大小寶
_ 萬用字元
代表剛好一個字元:
-- 兩個字的名字
WHERE name LIKE '__'
-- 符合:王明、李華(不符合:王小明)
-- 第二個字是「小」
WHERE name LIKE '_小%'
-- 符合:王小明、李小華
[charlist] 萬用字元(SQL Server)
代表括號內的任一字元:
-- 以 A、B 或 C 開頭
WHERE name LIKE '[ABC]%'
-- 符合:Apple、Banana、Cat
-- 以 A 到 D 之間的字母開頭
WHERE name LIKE '[A-D]%'
-- 符合:Apple、Banana、Cat、Dog
[^charlist] 萬用字元(SQL Server)
代表不在括號內的字元:
-- 不以 A、B、C 開頭
WHERE name LIKE '[^ABC]%'
-- 符合:Dog、Egg(不符合:Apple、Banana)
常見模式範例
| 模式 | 說明 | 符合範例 |
|---|---|---|
'A%' | 以 A 開頭 | Apple, ABC |
'%A' | 以 A 結尾 | Data, USA |
'%AB%' | 包含 AB | ABCD, XABX |
'A%B' | 以 A 開頭且以 B 結尾 | AB, AXXB |
'_AB' | 三個字,後兩個是 AB | CAB, XAB |
'A__' | 三個字,以 A 開頭 | ABC, AXY |
MySQL 的正規表示式
MySQL 可以用 REGEXP 做更複雜的模式比對:
-- 以數字開頭
WHERE name REGEXP '^[0-9]'
-- 包含連續的數字
WHERE phone REGEXP '[0-9]{3}'