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

T-SQL LIKE 子句與萬用字元完整指南:模式比對、跳脫字元、字元集合與實戰範例

     編輯:關於SqlServer

LIKE 運算子語法


match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
  • match_expression:任何字串型別的有效運算式。
  • pattern:搜尋模式,可包含常規字元與萬用字元。
  • ESCAPE:指定跳脫字元,將萬用字元視為常規字元。

四大萬用字元對照表

萬用字元說明範例匹配範例
%零個或多個任意字元WHERE title LIKE '%computer%'書名任意位置含 "computer"
_ (底線)單一任意字元WHERE au_fname LIKE '_ean'Dean、Sean 等四字元以 ean 結尾
[ ]指定範圍/集合內的單一字元WHERE au_lname LIKE '[C-P]arsen'Carsen、Larsen、Karsen 等
[^]不在指定範圍/集合內的單一字元WHERE au_lname LIKE 'de[^l]%'以 de 開頭、第三字元非 l 的姓氏

將萬用字元視為常規字元(跳脫)

ESCAPE 子句:自訂跳脫字元


-- 搜尋字串 "30%"(% 為常規字元)
WHERE comment LIKE '%30!%%' ESCAPE '!'
-- ! 為跳脫字元,!% 代表常規字元 %,尾部 % 為萬用字元

實戰範例:搜尋 "50% off..."


USE pubs;
GO
SELECT notes
FROM titles
WHERE notes LIKE '50!% off when 100 or more copies are purchased' ESCAPE '!';
GO

字元集合 [ ] 進階用法

範例 1:查找 Cheryl 或 Sheryl


SELECT au_lname, au_fname, phone
FROM authors
WHERE au_fname LIKE '[CS]heryl'
ORDER BY au_lname, au_fname;

範例 2:姓氏為 Carson/Carsen/Karson/Karsen


SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE '[CK]ars[eo]n'
ORDER BY au_lname, au_fname;

效能與最佳實踐

  • 前導萬用字元殺傷力大:LIKE '%keyword%' 無法使用索引(全表掃描)。若頻繁搜尋,考慮全文檢索或前綴索引(LIKE 'keyword%' 可用索引)。
  • 字元集合優於多條件 OR:LIKE '[ABC]%' 優於 LIKE 'A%' OR LIKE 'B%' OR LIKE 'C%'。
  • 資料型別隱性轉換:非字串型別會隱性轉換為字串,可能導致索引失效,建議明確 CAST。
  • Collation 影響比較規則:CI (不區分大小寫) vs CS (區分大小寫)、AI (不區分重音) vs AS (區分重音)。

常見陷阱

  1. 誤以為 _ 匹配空白字元 — 它匹配「任意單一字元」,包含空白、數字、符號。
  2. [^] 在集合外表示「非」,在集合內首位表示「常規字元 ^」,語境不同含義不同。
  3. 中文字元在 _ 佔一個字元位置,在 % 可匹配任意長度中文字串。

熟練掌握 LIKE 萬用字元與跳脫機制,能撰寫精準、高效的字串模式比對查詢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
模式匹配字串說明
LIKE '5[%]'5%方括號包裹 % 視為常規字元
LIKE '[_]n'_n方括號包裹 _ 視為常規字元
LIKE '[a-cdf]'a、b、c、d、f集合列舉
LIKE '[-acdf]'-、a、c、d、f破折號置首視為常規字元
LIKE '[[]]'[左括號常規字元
LIKE '[]]']右括號常規字元
LIKE 'abc[_]d%'abc_d、abc_de...混合跳脫