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

SQL Server 萬用字元完整指南:LIKE 模式比對實戰範例

     編輯:關於SqlServer

熟練掌握 LIKE 萬用字元,能以簡潔語法解決複雜字串比對需求。本文涵蓋四大萬用字元(%、_、[]、[^])與 PATINDEX 進階應用實例。

四大萬用字元速查

符號意義範例
%任意長度(含 0)字串'ABC%' 以 ABC 開頭
_單一任意字元'_an' 以 an 結尾的三字元
[範圍]單一字元落於指定集合'[0-9][0-9][0-9][0-9]' 四位數字郵遞區號
[^範圍]單一字元**不在**指定集合'Al[^a]%' 以 Al 開頭且第三字元非 a

實戰範例(AdventureWorks2012)

1. 底線 _:固定長度模式

SELECT FirstName, LastName 
FROM Person.Person 
WHERE FirstName LIKE '_an' 
ORDER BY FirstName;

找出三字母、以 "an" 結尾的名字(如 Dan, Jan, Nan)。

2. 排除字元 [^]:否定集合

SELECT FirstName, LastName 
FROM Person.Person 
WHERE FirstName LIKE 'Al[^a]%' 
ORDER BY FirstName;

找出以 "Al" 開頭、第三字母**不是** "a" 的名字(排除 Alan, Alana 等)。

3. 字元範圍 []:郵遞區號驗證

SELECT e.BusinessEntityID, p.FirstName, p.LastName, a.PostalCode
FROM HumanResources.Employee e
JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID
JOIN Person.BusinessEntityAddress bea ON e.BusinessEntityID = bea.BusinessEntityID
JOIN Person.Address a ON a.AddressID = bea.AddressID
WHERE a.PostalCode LIKE '[0-9][0-9][0-9][0-9]';

篩選四位數字郵遞區號的員工。結果範例:290 Lynn Tsoflias 3000。

進階:中英文混合名稱分類

利用 PATINDEX 偵測字元範圍,分類純英文、純中文、混合:

CREATE TABLE #tb (name NVARCHAR(20));
INSERT INTO #tb VALUES ('kevin'), ('kevin劉'), ('劉');

SELECT *, 'Eng' AS Type FROM #tb 
WHERE PATINDEX('%[a-z]%', name) > 0 AND PATINDEX('%[吖-坐]%', name) = 0
UNION ALL
SELECT *, 'CN' FROM #tb 
WHERE PATINDEX('%[吖-坐]%', name) > 0 AND PATINDEX('%[a-z]%', name) = 0
UNION ALL
SELECT *, 'Eng&CN' FROM #tb 
WHERE PATINDEX('%[吖-坐]%', name) > 0 AND PATINDEX('%[a-z]%', name) > 0;

結果:kevin=Eng、劉=CN、kevin劉=Eng&CN。
註:[吖-坐] 為常見中文字元範圍近似,實務建議使用 N'' 前綴與資料庫定序配合,或改用 LIKE N'%[一-龥]%'(需定序支援)。

效能提醒

  • LIKE '%pattern%' 開頭萬用字元**無法使用索引搜尋**(Index Seek),會掃描全表。
  • 前綴固定 LIKE 'prefix%' 可用索引。
  • 大量文字搜尋建議使用 **Full-Text Search** 或 **Azure Cognitive Search**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved