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

SQL Server 英文單字完整比對技巧:LIKE 模式匹配實戰

     編輯:關於SqlServer

問題場景

資料表 Sentences 儲存英文句子,需查詢包含獨立單字 "I" 的記錄。直接使用 LIKE '%I%' 會誤判包含 "it"、"is" 等單字的句子。

SQL Server 模式匹配語法

SQL Server 的 LIKE 支援字元類別 [...] 與排除 [^...],類似簡易正則:

  • [a-zA-Z]:任一英文字母
  • [^a-zA-Z]:非英文字母(含空格、標點、字串邊界)

逐步優化查詢條件

嘗試 1:前後皆為非字母

WHERE Sentence LIKE '%[^a-zA-Z]I[^a-zA-Z]%'

❌ 遺漏句首 "I am..." 與句尾 "...like I" 的情況。

嘗試 2:分別處理邊界

WHERE Sentence LIKE '%[^a-zA-Z]I[^a-zA-Z]%'
   OR Sentence LIKE 'I[^a-zA-Z]%'
   OR Sentence LIKE '%[^a-zA-Z]I'

✅ 邏輯正確,但語句冗長。

最佳解法:字串前後補空格

WHERE ' ' + Sentence + ' ' LIKE '%[^a-zA-Z]I[^a-zA-Z]%'

✅ 單一條件涵蓋所有邊界情況,效能與可讀性俱佳。

擴展:通用單字邊界函數

CREATE FUNCTION dbo.IsWholeWord(@Text VARCHAR(MAX), @Word VARCHAR(100))
RETURNS BIT
AS BEGIN
    RETURN CASE WHEN ' ' + @Text + ' ' LIKE '%[^a-zA-Z]' + @Word + '[^a-zA-Z]%' THEN 1 ELSE 0 END;
END

使用範例

SELECT * FROM Sentences 
WHERE dbo.IsWholeWord(Sentence, 'I') = 1;

效能考量

  • 前導萬用字元 %... 導致索引無法求值,全表掃描
  • 大量資料建議使用 全文檢索 或 計算欄位 + 索引
  • 計算欄位範例:ALTER TABLE Sentences ADD SearchText AS ' ' + Sentence + ' '

總結

利用 ' ' + Column + ' ' 統一邊界處理,配合 [^a-zA-Z] 排除字母,是 SQL Server 中實現單字完整比對最簡潔高效的方法。

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