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

SQL 通配符完整指南:LIKE 搭配 % _ [] [^] 實戰範例

     編輯:關於SqlServer

核心概念

通配符用於 `LIKE` 運算子的模式比對,可替代一或多個字元。SQL Server 支援四種通配符:

符號名稱說明範例匹配
%百分號替代**零個或多個**任意字元'A%' → A, AB, ABC...
_底線替代**單一個**任意字元'_BC' → ABC, XBC...
[charlist]字元清單匹配清單中**任一單一字元**'[ABC]%' → 以 A/B/C 開頭
[^charlist] 或 [!charlist]排除字元清單匹配**不在**清單中的任一單一字元'[^ABC]%' → 不以 A/B/C 開頭

範例資料:Persons 表

IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

實戰範例集

1. % 通配符:前綴/包含/後綴匹配

-- 城市以 "Ne" 開頭
SELECT * FROM Persons WHERE City LIKE 'Ne%';
-- 結果:New York (Id=2)

-- 城市包含 "lond" (不分大小寫)
SELECT * FROM Persons WHERE City LIKE '%lond%';
-- 結果:London (Id=1)

2. _ 通配符:固定長度模式

-- FirstName 第二字元起為 "eorge" (即 _eorge)
SELECT * FROM Persons WHERE FirstName LIKE '_eorge';
-- 結果:George (Id=2)

-- LastName 模式:C _ r _ er (Carter)
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er';
-- 結果:Carter (Id=3)

3. [charlist] 字元清單:離散集合匹配

-- 城市以 A、L、N 任一字元開頭
SELECT * FROM Persons WHERE City LIKE '[ALN]%';
-- 結果:London (L), New York (N) → Id=1,2

4. [^charlist] 排除清單:反向匹配

-- 城市不以 A、L、N 開頭
SELECT * FROM Persons WHERE City LIKE '[^ALN]%';
-- 或 WHERE City LIKE '[!ALN]%'
-- 結果:Beijing (B) → Id=3

進階技巧與注意事項

  1. 範圍寫法:`[A-F]` 匹配 A 到 F 任一字元;`[0-9]` 匹配任一數字。
  2. 跳脫字元:若需匹配字面 `%`、`_`、`[`,使用 `ESCAPE` 子句:
    SELECT * FROM Table WHERE Column LIKE '%100\%%' ESCAPE '\';  -- 匹配含 "100%" 的字串
        
  3. 大小寫敏感度:取決於資料庫/欄位定序。`Chinese_PRC_CI_AS` 為不分大小寫 (CI);`_CS_` 為分大小寫。
  4. 效能陷阱:`LIKE '%keyword%'` 導致全表掃描。前綴查詢 `LIKE 'keyword%'` 可用索引。全文檢索需求請用 Full-Text Search。
  5. 避免隱式轉換:比對欄位與模式字串型別一致,否則索引失效。

小結

熟練掌握 `%`、`_`、`[]`、`[^]` 四大通配符組合,能解決 95% 的模糊比對需求。記住:前綴查詢用索引、中綴/後綴需全掃、複雜模式考慮全文檢索或正則表達式 (CLR)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved