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

SQL Server 的 LIKE 支援字元類別 [...] 與排除 [^...],類似簡易正則:
[a-zA-Z]:任一英文字母[^a-zA-Z]:非英文字母(含空格、標點、字串邊界)WHERE Sentence LIKE '%[^a-zA-Z]I[^a-zA-Z]%'
❌ 遺漏句首 "I am..." 與句尾 "...like I" 的情況。
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 中實現單字完整比對最簡潔高效的方法。