LIKE 關鍵字搜尋與指定模式比對的字串、日期或時間值。有關詳細資料,請參閱。LIKE
關鍵字使用常規運算式包含值所要匹配的模式。模式包含要搜尋的字串,字串中可包含四種萬用字元的任意組合。
| 萬用字元 |
含義 |
% |
包含零個或多個字元的任一字元串。 |
_ |
任何單個字元。 |
[ ] |
指定範圍(例如 [a-f])或集合(例如 [abcdef])內的任何單個字元。 |
[^] |
不在指定範圍(例如 [^a - f])或集合(例如 [^abcdef])內的任何單個字元。 |
請將萬用字元和字串用單引號引起來,例如:
- LIKE 'Mc%' 將搜尋以字母 Mc 開頭的所有字串(如 McBadden)。
- LIKE '%inger' 將搜尋以字母 inger 結尾的所有字串(如 Ringer 和 Stringer)。
- LIKE '%en%' 將搜尋任意位置包含字母 en 的所有字串(如 Bennet、Green 和 McBadden)。
- LIKE '_heryl' 將搜尋以字母 heryl 結尾的所有六個字母的名稱(如 Cheryl 和 Sheryl)。
- LIKE '[CK]ars[eo]n' 將搜尋 Carsen、Karsen、Carson 和 Karson(如 Carson)。
- LIKE '[M-Z]inger' 將搜尋以字母 inger 結尾、以 M 到 Z 中的任何單個字母開頭的所有名稱(如 Ringer)。
- LIKE 'M[^c]%' 將搜尋以字母 M 開頭,並且第二個字母不是 c 的所有名稱(如 MacFeather)。
此查詢將尋找 Contact 表中區號為 415 的所有電話號碼:
|
複製代碼 |
SELECT Phone FROM AdventureWorks.Person.Contact WHERE Phone LIKE '415%' |
可以將 NOT LIKE 與同樣的萬用字元結合使用。若要尋找 Contact 表中區號不是 415
的所有電話號碼,請使用下列等價查詢中的任意一個:
|
複製代碼 |
SELECT Phone FROM AdventureWorks.Person.Contact WHERE Phone NOT LIKE '415%'
-- Or
SELECT Phone FROM AdventureWorks.Person.Contact WHERE NOT Phone LIKE '415%' |
IS NOT NULL 子句可與萬用字元和 LIKE 子句結合使用。例如,此查詢將從 Contact 表中檢索以 415 開頭且
IS NOT NULL 的所有電話號碼:
|
複製代碼 |
USE AdventureWorks; GO SELECT Phone FROM Person.Contact WHERE Phone LIKE '415%' and Phone IS NOT NULL |
| 重要事項: |
| 包含 LIKE 關鍵字的語句的輸出取決於安裝過程中選擇的排序次序。有關不同的排序次序所產生的影響的詳細資料,請參閱使用定序。 |
可以在 text 列中使用的唯一 WHERE 條件是 LIKE、IS NULL 或 PATINDEX。
不與 LIKE 一同使用的萬用字元將解釋為常量而非模式,換言之,這些萬用字元僅代表其本身的值。以下查詢試圖尋找只由四個字元 415%
組成的電話號碼。該查詢將不會尋找以 415 開頭的電話號碼。有關常量的詳細資料,請參閱常量(資料庫引擎)。
|
複製代碼 |
SELECT Phone FROM AdventureWorks.Person.Contact WHERE Phone = '415%' |
使用萬用字元時應著重考慮的另一個問題是對效能的影響。如果運算式以萬用字元開頭,就不能使用索引(就如同給定了姓名 "%mith" 而非 "Smith"
時,將無法知道應從電話簿的哪一頁開始尋找)。運算式中間或結尾處的萬用字元不妨礙索引的使用(就如同在電話簿中一樣,如果姓名為 "Samuel%",則不論
Samuels 和 Samuelson 是否都在電話簿上,都知道該從何處開始尋找。)
搜尋萬用字元字元
可以搜尋萬用字元字元。有兩種方法可指定平常用作萬用字元的字元:
如果使用 LIKE 執行字串比較,模式串中的所有字元(包括每個前置空格和尾隨空格)都有意義。如果要求比較返回帶有字串
LIKE 'abc '(abc 後跟一個空格)的所有行,將不會返回列值為 abc(abc
後沒有空格)的行。但是反過來,情況並非如此。可以忽略模式所要匹配的運算式中的尾隨空格。如果要求比較返回帶有字串 LIKE
'abc'(abc 後沒有空格)的所有行,將返回以 abc 開頭且具有零個或多個尾隨空格的所有行。