Sqlserver:Like模式比對

來源:互聯網
上載者:User

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 是否都在電話簿上,都知道該從何處開始尋找。)

搜尋萬用字元字元

可以搜尋萬用字元字元。有兩種方法可指定平常用作萬用字元的字元:

  • 使用 ESCAPE 關鍵字定義轉義符。在模式中,當轉義符置於萬用字元之前時,該萬用字元就解釋為一般字元。例如,要搜尋在任意位置包含字串 5%
    的字串,請使用:

    複製代碼
    WHERE ColumnA LIKE '%5/%%' ESCAPE '/'

    在上述
    LIKE 子句中,前置和結尾百分比符號 (%) 解釋為萬用字元,而斜杠 (/) 之後的百分比符號解釋為字元 %。

  • 在方括弧 ([ ]) 中只包含萬用字元本身。若要搜尋破折號 (-) 而不是用它指定搜尋範圍,請將破折號指定為方括弧內的第一個字元:

    複製代碼
    WHERE ColumnA LIKE '9[-]5'

    下表顯示了括在方括弧內的萬用字元的用法。

    符號 含義

    LIKE '5[%]'

    5%

    LIKE '5%'

    5 後跟 0 個或多個字元的字串

    LIKE '[_]n'

    _n

    LIKE '_n'

    an, in, on (and so on)

    LIKE '[a-cdf]'

    a、b、c、d 或 f

    LIKE '[-acdf]'

    -、a、c、d 或 f

    LIKE '[ [ ]'

    [

    LIKE ']'

    ]

如果使用 LIKE 執行字串比較,模式串中的所有字元(包括每個前置空格和尾隨空格)都有意義。如果要求比較返回帶有字串
LIKE 'abc '(abc 後跟一個空格)的所有行,將不會返回列值為 abc(abc
後沒有空格)的行。但是反過來,情況並非如此。可以忽略模式所要匹配的運算式中的尾隨空格。如果要求比較返回帶有字串 LIKE
'abc'
(abc 後沒有空格)的所有行,將返回以 abc 開頭且具有零個或多個尾隨空格的所有行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.