| 萬用字元 | 含義 | 範例 | 匹配範例 |
|---|---|---|---|
% | 零或多個任意字元 | LIKE 'Mc%' | McBadden, Mc, McDonald |
_ | 單一任意字元 | LIKE '_heryl' | Cheryl, Sheryl |
[範圍] | 指定範圍/集合內單一字元 | LIKE '[CK]ars[eo]n' | Carsen, Karsen, Carson, Karson |
[^範圍] | 不在指定範圍/集合內單一字元 | LIKE 'M[^c]%' | MacFeather (非 Mc...) |
LIKE '415%':以 415 開頭(電話區碼)LIKE '%inger':以 inger 結尾LIKE '%en%':包含 en(中間匹配)LIKE '[M-Z]inger':M-Z 開頭 + inger 結尾NOT LIKE '415%' / WHERE NOT phone LIKE '415%':排除模式-- 無法使用索引(全表掃描)
WHERE name LIKE '%mith'
-- 可使用索引(範圍掃描)
WHERE name LIKE 'Smith%'
WHERE name LIKE 'Samue%'
原理:B-tree 索引依前綴排序。前導 % 如同電話簿找「%mith」——無法定位起始頁。中間或尾部 % 不影響索引搜尋定位。
WHERE ColumnA LIKE '%5/%%' ESCAPE '/' -- 找含 5% 的字串
/ 後的 % 視為字面字元。
WHERE ColumnA LIKE '9[-]5' -- 找 9-5,非範圍
WHERE ColumnA LIKE '5[%]' -- 找 5%
WHERE ColumnA LIKE '[_]n' -- 找 _n
WHERE col LIKE 'abc ':不匹配 'abc'(模式含空格)WHERE col LIKE 'abc':匹配 'abc'、'abc '、'abc '(忽略資料尾隨空格)資料尾隨空格在 LIKE 比較中被忽略,但模式尾隨空格卻有意義。
text/ntext/image(已淘汰)僅支援 LIKE、IS NULL、PATINDEX。現代請用 VARCHAR(MAX)/NVARCHAR(MAX)。
LIKE 結果依資料庫/欄位排序規則:大小寫敏感、重音敏感、寬度敏感。測試時請確認 COLLATION 設定。
REVERSE(name) 索引支援尾部搜尋CONTAINS/FREETEXT 適用大量文字搜尋WHERE name >= 'Smith' AND name < 'Smiti' 替代 LIKE 'Smith%'-- 原始:前導 % 無法用索引
SELECT * FROM Customers WHERE Name LIKE '%' + @Keyword + '%'
-- 優化 1:若為字首搜尋
SELECT * FROM Customers WHERE Name LIKE @Keyword + '%'
-- 優化 2:全文檢索
CREATE FULLTEXT INDEX ON Customers(Name) KEY INDEX PK_Customers
SELECT * FROM Customers WHERE CONTAINS(Name, @Keyword)
-- 優化 3:計算欄位反轉索引(支援尾部搜尋)
ALTER TABLE Customers ADD RevName AS REVERSE(Name)
CREATE INDEX IX_Customers_RevName ON Customers(RevName)
SELECT * FROM Customers WHERE RevName LIKE REVERSE(@Keyword) + '%'