搜尋條件中的模式比對
LIKE 關鍵字可搜尋符合指定模式 (Pattern) 的字元字串、日期或時間數值。如需詳細資訊,請參閱<資料類型 (Transact-SQL)>。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
開頭且非 NULL (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 使用的萬用字元會解譯成常數,而非模式 (Pattern),也就是說,它們只代表它們本身的值。下列查詢將嘗試找出只包含 415%
四個字元的任何電話號碼,而不會尋找以 415
開頭的電話號碼。如需有關常數的詳細資訊,請參閱<常數 (Database Engine)>。
SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone = '415%'
使用萬用字元的另一個重要考量為它們對於效能的影響。如果運算式開頭為萬用字元,就無法使用索引(就好像給定名稱為 '%mith',而非 'Smith' 時,您將不知道要從電話簿的何處找起)。如果萬用字元在運算式內部或結尾,則仍可以使用索引(就好像在電話簿裡面一樣,如果姓名為 'Samuel%',您將知道從何處開始搜尋,因為不管姓名是 Samuels 與 Samuelson,它們都在該處)。
搜尋萬用字元
您可以搜尋萬用字元。您可使用兩種方法來指定一般被視為萬用字元的字元:
使用 ESCAPE 關鍵字來定義逸出字元。當逸出字元放在模式的萬用字元前面時,萬用字元將被解譯為字元。例如,若要在字串的任意位置搜尋字串
5%
,請使用:WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
在此
LIKE
子句中,開頭與結束的百分比符號 (%
) 將解譯成萬用字元,而斜線 (/
) 後的百分比符號則解譯成 % 字元。使用方括號 (
[ ]
) 將萬用字元本身括起來。若要搜尋連字號 (-
),而非使用它來指定搜尋範圍,請以連字號作為一組括號內部的第一個字元:WHERE ColumnA LIKE '9[-]5'
下表顯示括在方括號中的萬用字元用法。
符號 意義 LIKE '5[%]'
5%
LIKE '5%'
5 後面跟著零或多個字元的任意字串
LIKE '[_]n'
_n
LIKE '_n'
an, in, on (依此類推)
LIKE '[a-cdf]'
a, b, c, d, 或 f
LIKE '[-acdf]'
-, a, c, d, 或 f
LIKE '[ [ ]'
[
LIKE ']'
]
當您利用 LIKE 執行字串比較時,模式字串中的所有字元都是有意義的,包括每一個開頭和尾端空白 (空格)。如果要求使用 LIKE 'abc ' 來做比較,以傳回具有字串如 abc 後面跟著一個空格的所有資料列,就不會傳回其資料行值為 abc (abc 後面沒有空格) 的資料列。相反的 (abc 之前有空格) 也不會傳回。但是在要比對模式的運算式中,行尾的空白會被忽略掉。如果要求使用 LIKE 'abc' 來做比較,以傳回具有字串如 abc 後面沒有空格的所有資料列,那麼開頭為 abc 且後面跟著或不跟著空格的所有資料列,都會被傳回。
請參閱
其他資源
LIKE (Transact-SQL)
WHERE (Transact-SQL)
% (萬用字元 - 相符的字元) (Transact-SQL)
[ ] (萬用字元 - 相符的字元) (Transact-SQL)
[^] (萬用字元 - 不相符的字元) (Transact-SQL)
_ (萬用字元 - 符合一個字元) (Transact-SQL)
PATINDEX (Transact-SQL)