Mustervergleich in Suchbedingungen

Mit dem LIKE-Schlüsselwort können Sie nach Zeichenfolgen-, Datums- oder Zeitwerten suchen, die mit einem angegebenen Muster übereinstimmen. Weitere Informationen finden Sie unter Datentypen (Transact-SQL). Das LIKE-Schlüsselwort verwendet einen regulären Ausdruck, der das Muster enthält, mit dem die Werte verglichen werden. Das Muster enthält die zu suchende Zeichenfolge, die eine beliebige Kombination aus den folgenden vier Platzhaltern enthalten kann:

Platzhalter Bedeutung

%

Eine Zeichenfolge aus null oder mehr Zeichen

_

Ein einzelnes Zeichen

[ ]

Ein einzelnes Zeichen innerhalb des angegebenen Bereichs (z. B. [a-f]) oder der festgelegten Menge (z. B. [abcdef])

[^]

Ein einzelnes Zeichen, das nicht innerhalb des angegebenen Bereichs (z. B. [^a-f]) oder der festgelegten Menge (z. B. [^abcdef]) liegt

Schließen Sie die Platzhalterzeichen und die Zeichenfolge in einfache Anführungszeichen ein, wie im folgenden Beispiel:

  • LIKE 'Mc%' sucht nach Zeichenfolgen, die mit den Buchstaben "Mc" beginnen (McBadden).
  • LIKE '%inger' sucht nach Zeichenfolgen, die mit den Buchstaben "inger" enden (Ringer, Stringer).
  • LIKE '%en%' sucht nach Zeichenfolgen, die die Buchstaben "en" an einer beliebigen Position innerhalb der Zeichenfolge enthalten (Bennet, Green, McBadden).
  • LIKE '_heryl' sucht nach Namen, die aus sechs Buchstaben bestehen und mit den Buchstaben "heryl" enden (Cheryl, Sheryl).
  • LIKE '[CK]ars[eo]n' sucht nach Carsen, Karsen, Carson und Karson (Carson).
  • LIKE '[M-Z]inger' sucht nach Namen, die mit den Buchstaben "inger" enden und mit einem Buchstaben zwischen M und Z beginnen (Ringer).
  • LIKE 'M[^c]%' sucht nach Namen, die mit dem Buchstaben M beginnen und als zweiten Buchstaben nicht c enthalten (MacFeather).

Die folgende Abfrage ermittelt aus der Contact-Tabelle alle Telefonnummern, die die Gebietsvorwahl 415 besitzen:

SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone LIKE '415%'

Sie können NOT LIKE mit denselben Platzhaltern verwenden. Wenn alle Telefonnummern in der Contact-Tabelle ermittelt werden sollen, deren Vorwahl nicht 415 lautet, verwenden Sie eine der folgenden äquivalenten Abfragen:

SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone NOT LIKE '415%'

-- Or

SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE NOT Phone LIKE '415%'

Die IS NOT NULL-Klausel kann mit Platzhaltern und der LIKE-Klausel verwendet werden. Beispielsweise ruft die folgende Abfrage aus der Contact-Tabelle alle Telefonnummern ab, die mit 415 beginnen und für die IS NOT NULL gilt:

USE AdventureWorks;
GO
SELECT Phone
FROM Person.Contact
WHERE Phone LIKE '415%' and Phone IS NOT NULL
ms187489.note(de-de,SQL.90).gifWichtig:
Die Ausgabe von Anweisungen mit dem LIKE-Schlüsselwort hängt von der Sortierreihenfolge ab, die während der Installation ausgewählt wurde. Weitere Informationen zu den Auswirkungen verschiedener Sortierreihenfolgen finden Sie unter Arbeiten mit Sortierungen.

Für text-Spalten können Sie als WHERE-Bedingungen nur LIKE, IS NULL oder PATINDEX verwenden.

Nicht im Zusammenhang mit LIKE verwendete Platzhalter werden nicht als Muster, sondern als Konstanten interpretiert; sie stellen also lediglich ihre eigenen Werte dar. Mithilfe der folgenden Abfrage werden Telefonnummern ermittelt, die nur aus den vier Zeichen 415% bestehen. Es werden keine Telefonnummern ermittelt, die mit 415 beginnen. Weitere Informationen zu Konstanten finden Sie unter Konstanten (Datenbankmodul).

SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone = '415%'

Beim Verwenden von Platzhaltern sollten außerdem die möglichen Auswirkungen auf die Leistung bedacht werden. Wenn der Ausdruck mit einem Platzhalter beginnt, kann kein Index verwendet werden. (Sie würden auch nicht wissen, an welcher Stelle Sie in einem Telefonbuch beginnen sollen, wenn der Name '%mith' statt 'Smith' angegeben wäre.) Durch einen Platzhalter in einem Ausdruck oder am Ende eines Ausdrucks wird die Verwendung eines Indexes nicht ausgeschlossen. (Sie würden wissen, an welcher Stelle in einem Telefonbuch Sie suchen müssten, wenn der Name 'Samuel%' lauten würde, ganz gleich, ob die beiden Namen Samuels und Samuelson vorhanden sind.)

Suchen nach Platzhalterzeichen

Sie können auch nach den Platzhalterzeichen suchen. Es gibt zwei Möglichkeiten, um ein Zeichen anzugeben, bei dem es sich normalerweise um einen Platzhalter handelt.

  • Sie können das ESCAPE-Schlüsselwort verwenden, um ein Escapezeichen zu definieren. Wird das Escapezeichen im Muster vor den Platzhalter gesetzt, wird der Platzhalter als ein Zeichen interpretiert. Wenn Sie beispielsweise an einer beliebigen Stelle in einer Zeichenfolge nach der Zeichenfolge 5% suchen möchten, verwenden Sie folgenden Code:

    WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
    

    In dieser LIKE-Klausel werden die Prozentzeichen (%) am Anfang und am Ende als Platzhalter interpretiert, während das Prozentzeichen, dem ein Schrägstrich (/) vorangestellt ist, als das Zeichen % interpretiert wird.

  • Sie können den Platzhalter in eckige Klammern ([ ]) einschließen. Wenn Sie nach einem Bindestrich (-) suchen möchten, statt den Bindestrich zum Angeben eines Suchbereichs zu verwenden, geben Sie den Bindestrich als erstes Zeichen in eckigen Klammern an:

    WHERE ColumnA LIKE '9[-]5'
    

    In der folgenden Tabelle wird die Verwendung von Platzhaltern dargestellt, die in eckige Klammern eingeschlossen sind.

    Symbol Bedeutung

    LIKE '5[%]'

    5%

    LIKE '5%'

    5, gefolgt von einer beliebigen Zeichenfolge aus null oder mehr Zeichen

    LIKE '[_]n'

    _n

    LIKE '_n'

    an, in, on usw.

    LIKE '[a-cdf]'

    a, b, c, d oder f

    LIKE '[-acdf]'

    -, a, c, d oder f

    LIKE '[ [ ]'

    [

    LIKE ']'

    ]

Beim Durchführen von Zeichenfolgenvergleichen mit LIKE werden alle Zeichen in der Musterzeichenfolge berücksichtigt, einschließlich aller vorhergehenden und nachfolgenden Leerzeichen. Wenn in einer Abfrage LIKE 'abc ' (abc, gefolgt von einem Leerzeichen) verwendet wird, um Zeilen zurückzugeben, die dem Muster abc ähnlich sind, werden keine Zeilen zurückgegeben, die den Wert abc (abc ohne Leerzeichen) enthalten. Das Gegenteil trifft hingegen nicht zu. Nachfolgende Leerzeichen in dem Ausdruck, der mit dem Muster verglichen wird, wirken sich nicht auf das Ergebnis aus. Bei einem Vergleich, der alle Zeilen zurückgeben soll, die der Bedingung LIKE 'abc' (abc ohne nachfolgendes Leerzeichen) entsprechen, werden alle mit abc beginnenden Zeilen zurückgegeben, unabhängig davon, ob sie nachfolgende Leerzeichen aufweisen.

Siehe auch

Andere Ressourcen

LIKE (Transact-SQL)
WHERE (Transact-SQL)
% (Platzhalterzeichen – zu suchende(s) Zeichen) (Transact-SQL)
[ ] (Platzhalterzeichen - zu suchende(s) Zeichen) (Transact-SQL)
[^] (Platzhalterzeichen - nicht zu suchende(s) Zeichen) (Transact-SQL)
_ (Platzhalterzeichen - einzelnes zu suchendes Zeichen) (Transact-SQL)
PATINDEX (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005