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%'包含 ABABCD, XABX
'A%B'以 A 開頭且以 B 結尾AB, AXXB
'_AB'三個字,後兩個是 ABCAB, XAB
'A__'三個字,以 A 開頭ABC, AXY

MySQL 的正規表示式

MySQL 可以用 REGEXP 做更複雜的模式比對:

-- 以數字開頭
WHERE name REGEXP '^[0-9]'

-- 包含連續的數字
WHERE phone REGEXP '[0-9]{3}'