搜尋條件中的模式比對

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 且後面跟著或不跟著空格的所有資料列,都會被傳回。