LIKE (Transact-SQL)

Gilt für: SQL Server (alle unterstützten Versionen) Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Bestimmt, ob eine bestimmte Zeichenfolge mit einem angegebenen Muster übereinstimmt. Ein Muster kann normale Zeichen und Platzhalterzeichen einschließen. Bei einem Mustervergleich müssen normale Zeichen exakt mit den angegebenen Zeichen in der Zeichenfolge übereinstimmen. Platzhalterzeichen können jedoch mit beliebigen Teilen der Zeichenfolge übereinstimmen. Das Verwenden der Vergleichsoperatoren für Zeichenfolgen = und != ist nicht so flexibel wie das Verwenden von Platzhalterzeichen mit dem LIKE-Operator. Wenn eins der Argumente kein Zeichenfolgen-Datentyp ist, wird es von SQL Server-Datenbank-Engine in einen Zeichenfolgen-Datentyp konvertiert, sofern dies möglich ist.

Article link iconTransact-SQL-Syntaxkonventionen

Syntax

-- Syntax for SQL Server and Azure SQL Database  
  
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
match_expression [ NOT ] LIKE pattern  

Hinweis

Derzeit werden ESCAPE und STRING_ESCAPE nicht in Azure Synapse Analytics oder Analytics-Plattformsystem (PDW) unterstützt.

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

match_expression
Ein gültiger Ausdruck eines Zeichendatentyps.

pattern
Ist die bestimmte Zeichenfolge, nach der in match_expression gesucht werden soll, und kann die folgenden gültigen Platzhalterzeichen enthalten. pattern darf maximal 8.000 Bytes umfassen.

Platzhalter BESCHREIBUNG Beispiel
% Eine Zeichenfolge aus null oder mehr Zeichen WHERE title LIKE '%Computer%' findet alle Buchtitel, die das Wort 'Computer' enthalten.
_ (Unterstrich) Ein einzelnes Zeichen. WHERE au_fname LIKE '_ean' findet alle Vornamen mit vier Buchstaben, die auf ean enden (Dean, Sean usw.).
[ ] Beliebiges einzelnes Zeichen im angegebenen Bereich ([a-f]) oder in der angegebenen Menge ([abcdef]). WHERE au_lname LIKE '[C-P]arsen' findet alle Autorennachnamen, die auf 'arsen' enden und mit einem einzelnen Zeichen zwischen C und P beginnen, z. B. Carsen, Larsen, Karsen usw. In Bereichssuchvorgängen unterscheiden sich die im Bereich enthaltenen Zeichen möglicherweise je nach den Sortierungsregeln für die Sortierung.
[^] Beliebiges einzelnes Zeichen, das sich nicht im angegebenen Bereich ([^a-f]) oder in der angegebenen Menge ([^abcdef]) befindet. WHERE au_lname LIKE 'de[^l]%' findet alle Autorennachnamen, die mit 'de' beginnen und deren dritter Buchstabe nicht l ist.

escape_character
Ist ein Zeichen, das vor einem Platzhalterzeichen eingefügt wird, um anzuzeigen, dass der Platzhalter als reguläres Zeichen und nicht als Platzhalter interpretiert wird. excape_character ist ein Zeichenausdruck ohne Standard und muss zu einem einzelnen Zeichen ausgewertet werden.

Ergebnistypen

Boolescher Wert

Ergebniswert

LIKE gibt TRUE zurück, wenn match_expression dem angegebenen pattern entspricht.

Bemerkungen

Bei Zeichenfolgenvergleichen mithilfe von LIKE werden alle Zeichen in der Musterzeichenfolge berücksichtigt. Die zu berücksichtigenden Zeichen umfassen alle führenden oder nachfolgenden Leerzeichen. Wenn in einer Vergleichsabfrage 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. Nachfolgende Leerzeichen in dem Ausdruck, der mit dem Muster verglichen wird, werden jedoch ignoriert. Wenn in einer Abfrage LIKE 'abc' (abc ohne Leerzeichen) verwendet wird, um Zeilen zurückzugeben, die dem Muster abc ähnlich sind, werden alle Zeilen zurückgegeben, die mit abc anfangen und null oder mehr nachfolgende Leerzeichen enthalten.

Ein Zeichenfolgenvergleich mithilfe eines Musters, das Daten der Typen char und varchar enthält, ist bei Verwendung des LIKE-Operators möglicherweise aufgrund der Art und Weise, in der die Daten für jeden Datentyp gespeichert werden, nicht erfolgreich. Im folgenden Beispiel wird eine lokale char-Variable an eine gespeicherte Prozedur übergeben. Mit einem Mustervergleich sollen dann alle Mitarbeiter gefunden werden, deren Nachnamen mit den angegebenen Zeichen beginnen.

-- Uses AdventureWorks  
  
CREATE PROCEDURE FindEmployee @EmpLName CHAR(20)  
AS  
SELECT @EmpLName = RTRIM(@EmpLName) + '%';  
SELECT p.FirstName, p.LastName, a.City  
FROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressID  
WHERE p.LastName LIKE @EmpLName;  
GO  
EXEC FindEmployee @EmpLName = 'Barb';  
GO  

Die FindEmployee-Prozedur gibt keine Zeilen zurück, da die char-Variable (@EmpLName) immer dann nachfolgende Leerzeichen enthält, wenn der Name weniger als 20 Zeichen enthält. Da die LastName-Spalte vom Typ varchar ist, sind keine nachfolgenden Leerzeichen vorhanden. Diese Prozedur schlägt fehl, da die nachfolgenden Leerzeichen von Bedeutung sind.

Das folgende Beispiel ist jedoch erfolgreich, da der varchar-Variablen keine nachfolgenden Leerzeichen hinzugefügt werden.

-- Uses AdventureWorks  
  
CREATE PROCEDURE FindEmployee @EmpLName VARCHAR(20)  
AS  
SELECT @EmpLName = RTRIM(@EmpLName) + '%';  
SELECT p.FirstName, p.LastName, a.City  
FROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressID  
WHERE p.LastName LIKE @EmpLName;  
GO  
EXEC FindEmployee @EmpLName = 'Barb';  

Hier ist das Resultset.

FirstName      LastName            City
----------     -------------------- --------------- 
Angela         Barbariol            Snohomish
David          Barber               Snohomish
(2 row(s) affected)  

Mustervergleich mithilfe von LIKE

LIKE unterstützt Mustervergleiche im ASCII- und Unicode-Format. Sind alle Argumente (match_expression, pattern und ggf. escape_character) ASCII-Zeichen, wird ein ASCII-Mustervergleich durchgeführt. Wenn eines der Argumente von einem Unicode-Datentyp ist, werden alle Argumente in Unicode konvertiert und ein Unicode-Mustervergleich durchgeführt. Wenn Sie beim LIKE-Operator Unicode-Daten (nchar- oder nvarchar-Datentypen) verwenden, werden nachfolgende Leerzeichen berücksichtigt. Bei Daten, die nicht vom Typ Unicode sind, werden nachfolgende Leerzeichen ignoriert. Der Unicode-LIKE-Operator ist mit dem ISO-Standard kompatibel. Der ASCII-LIKE-Operator ist mit früheren Versionen von SQL Server kompatibel.

Die folgenden Beispiele verdeutlichen die Unterschiede der zurückgegebenen Zeilen beim Durchführen von Mustervergleichen mit ASCII- und Unicode-LIKE-Operatoren.

-- ASCII pattern matching with char column  
CREATE TABLE t (col1 CHAR(30));  
INSERT INTO t VALUES ('Robert King');  
SELECT *   
FROM t   
WHERE col1 LIKE '% King';   -- returns 1 row  
  
-- Unicode pattern matching with nchar column  
CREATE TABLE t (col1 NCHAR(30));  
INSERT INTO t VALUES ('Robert King');  
SELECT *   
FROM t   
WHERE col1 LIKE '% King';   -- no rows returned  
  
-- Unicode pattern matching with nchar column and RTRIM  
CREATE TABLE t (col1 NCHAR(30));  
INSERT INTO t VALUES ('Robert King');  
SELECT *   
FROM t   
WHERE RTRIM(col1) LIKE '% King';   -- returns 1 row  

Hinweis

LIKE-Vergleiche werden von der Sortierung beeinflusst. Weitere Informationen finden Sie unter COLLATE (Transact-SQL).

Verwenden des %-Platzhalterzeichens

Wird bei LIKE beispielsweise '5%' angegeben, sucht Datenbank-Engine nach der Zahl 5, gefolgt von einer beliebigen Zeichenfolge mit 0 oder mehr Zeichen.

Mit der folgenden Abfrage werden beispielsweise alle dynamischen Verwaltungssichten in der AdventureWorks2019-Datenbank angezeigt, da sie alle mit den Buchstaben dm beginnen.

-- Uses AdventureWorks  
  
SELECT Name  
FROM sys.system_views  
WHERE Name LIKE 'dm%';  
GO  

Wenn Objekte angezeigt werden sollen, bei denen es sich nicht um dynamische Verwaltungssichten handelt, verwenden Sie NOT LIKE 'dm%'. Sind insgesamt 32 Objekte vorhanden und LIKE findet 13 Namen, die dem Muster entsprechen, findet NOT LIKE die 19 Objekte, die dem Muster nicht entsprechen.

Mit einem Muster wie LIKE '[^d][^m]%' werden möglicherweise nicht immer die gleichen Namen gefunden. Statt 19 Namen werden möglicherweise nur 14 angezeigt, da Namen, die mit d beginnen oder deren zweiter Buchstabe m ist, aus dem Resultset ebenso entfernt werden wie die Namen der dynamischen Verwaltungssichten. Grund für dieses Verhalten ist die sequentielle Auswertung von Musterzeichenfolgen mit negativen Platzhalterzeichen, es wird also ein Platzhalter nach dem anderen ausgewertet. Wenn der Vergleich an einem beliebigen Punkt der Auswertung fehlschlägt, wird das entsprechende Objekt entfernt.

Verwenden von Platzhalterzeichen als Literale

Platzhalterzeichen können auch als Literalzeichen verwendet werden. Um ein Platzhalterzeichen als Literalzeichen zu verwenden, schließen Sie das Platzhalterzeichen in Klammern ein. Die folgende Tabelle enthält einige Beispiele für die Verwendung des LIKE-Schlüsselworts und der [ ]-Platzhalterzeichen.

Symbol Bedeutung
LIKE '5[%]' 5 %
LIKE '[_]n' _n
LIKE '[a-cdf]' a, b, c, d oder f
LIKE '[-acdf]' -, a, c, d oder f
LIKE '[ [ ]' [
LIKE ']' ]
LIKE 'abc[_]d%' abc_d und abc_de
LIKE 'abc[def]' abcd, abce und abcf

Mustervergleich mit der ESCAPE-Klausel

Sie können nach Zeichenfolgen suchen, die ein oder mehrere Platzhalterzeichen enthalten. Die discounts-Tabelle in der customers-Datenbank kann beispielsweise Rabattwerte mit einem Prozentzeichen (%) speichern. Um nach dem Prozentzeichen als Zeichen und nicht als Platzhalterzeichen zu suchen, müssen das ESCAPE-Schlüsselwort und das Escapezeichen angegeben werden. Eine Beispieldatenbank enthält beispielsweise eine comment-Spalte, die den Text 30% enthält. Wenn Sie in den Zeilen der comment-Spalte nach der Zeichenfolge "30%" suchen, geben Sie eine WHERE-Klausel wie WHERE comment LIKE '%30!%%' ESCAPE '!' an. Werden ESCAPE und das Escapezeichen nicht angegeben, gibt Datenbank-Engine alle Zeilen zurück, die die Zeichenfolge 30! enthalten.

Wenn im LIKE-Muster auf ein Escapezeichen kein Zeichen folgt, ist das Muster nicht gültig, und das LIKE-Muster gibt FALSE zurück. Wenn es sich beim Zeichen nach einem Escapezeichen nicht um ein Platzhalterzeichen handelt, wird das Escapezeichen verworfen und das folgende Zeichen als reguläres Zeichen im Muster behandelt. Zu diesen Platzhalterzeichen gehören das Prozentzeichen (%), der Unterstrich (_) und die linke eckige Klammer ([), wenn sie in doppelte eckige Klammern ([ ]) eingeschlossen sind. Innerhalb doppelter eckiger Klammern ([ ]) können Escapezeichen verwendet werden; dem Caretzeichen (^), dem Bindestrich (-) sowie der rechten eckigen Klammer (]) kann ein Escapezeichen vorangestellt werden.

0x0000 (char(0)) ist ein nicht definiertes Zeichen in Windows-Sortierungen und darf in LIKE nicht enthalten sein.

Beispiele

A. Verwenden von NOT LIKE mit dem Platzhalterzeichen %

Im folgenden Beispiel werden alle Telefonnummern gefunden, die die Vorwahl 415 in der PersonPhone-Tabelle enthalten.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, ph.PhoneNumber  
FROM Person.PersonPhone AS ph  
INNER JOIN Person.Person AS p  
ON ph.BusinessEntityID = p.BusinessEntityID  
WHERE ph.PhoneNumber LIKE '415%'  
ORDER by p.LastName;  
GO  

Hier ist das Resultset.

 FirstName             LastName             Phone
 -----------------     -------------------  ------------
 Ruben                 Alonso               415-555-124  
 Shelby                Cook                 415-555-0121  
 Karen                 Hu                   415-555-0114  
 John                  Long                 415-555-0147  
 David                 Long                 415-555-0123  
 Gilbert               Ma                   415-555-0138  
 Meredith              Moreno               415-555-0131  
 Alexandra             Nelson               415-555-0174  
 Taylor                Patterson            415-555-0170  
 Gabrielle              Russell             415-555-0197  
 Dalton                 Simmons             415-555-0115  
 (11 row(s) affected)  

B. Verwenden von NOT LIKE mit dem Platzhalterzeichen %

Im folgenden Beispiel werden alle Telefonnummern in der Tabelle PersonPhone gefunden, die nicht die Vorwahl 415 aufweisen.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, ph.PhoneNumber  
FROM Person.PersonPhone AS ph  
INNER JOIN Person.Person AS p  
ON ph.BusinessEntityID = p.BusinessEntityID  
WHERE ph.PhoneNumber NOT LIKE '415%' AND p.FirstName = 'Gail'  
ORDER BY p.LastName;  
GO  

Hier ist das Resultset.

FirstName              LastName            Phone
---------------------- -------------------- -------------------
Gail                  Alexander            1 (11) 500 555-0120  
Gail                  Butler               1 (11) 500 555-0191  
Gail                  Erickson             834-555-0132  
Gail                  Erickson             849-555-0139  
Gail                  Griffin              450-555-0171  
Gail                  Moore                155-555-0169  
Gail                  Russell              334-555-0170  
Gail                  Westover             305-555-0100  
(8 row(s) affected)  

C. Verwenden der ESCAPE-Klausel

Im folgenden Beispiel werden die ESCAPE-Klausel und das Escapezeichen verwendet, um die exakte Zeichenfolge 10-15% in der Spalte c1 der Tabelle mytbl2 zu suchen.

USE tempdb;  
GO  
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES  
      WHERE TABLE_NAME = 'mytbl2')  
   DROP TABLE mytbl2;  
GO  
USE tempdb;  
GO  
CREATE TABLE mytbl2  
(  
 c1 sysname  
);  
GO  
INSERT mytbl2 VALUES ('Discount is 10-15% off'), ('Discount is .10-.15 off');  
GO  
SELECT c1   
FROM mytbl2  
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';  
GO  

D: Verwenden des []-Platzhalterzeichens

Im folgenden Beispiel werden Mitarbeiter in der Person-Tabelle mit dem Vornamen Cheryl oder Sheryl gesucht.

-- Uses AdventureWorks  
  
SELECT BusinessEntityID, FirstName, LastName   
FROM Person.Person   
WHERE FirstName LIKE '[CS]heryl';  
GO  

Im folgenden Beispiel werden in der Person-Tabelle Zeilen für Mitarbeiter mit den Nachnamen Zheng oder Zhang gesucht.

-- Uses AdventureWorks  
  
SELECT LastName, FirstName  
FROM Person.Person  
WHERE LastName LIKE 'Zh[ae]ng'  
ORDER BY LastName ASC, FirstName ASC;  
GO  

Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

E. Verwenden von NOT LIKE mit dem Platzhalterzeichen %

Im folgenden Beispiel werden alle Mitarbeiter in der DimEmployee-Tabelle mit Telefonnummern gefunden, die mit 612 beginnen.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE phone LIKE '612%'  
ORDER by LastName;  

F. Verwenden von NOT LIKE mit dem Platzhalterzeichen %

Das folgende Beispiel findet alle Telefonnummern in der Tabelle DimEmployee, die nicht mit 612 beginnen. .

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE phone NOT LIKE '612%'  
ORDER by LastName;  

G. Verwenden von LIKE mit dem Platzhalterzeichen _

Im folgenden Beispiel werden alle Telefonnummern in der DimEmployee-Tabelle gefunden, die eine Vorwahl aufweisen, die mit 6 beginnt und mit 2 endet. Das Platzhalterzeichen % wird am Ende des Suchmusters eingefügt, um alle folgenden Zeichen im Spaltenwert für Telefonnummern abzugleichen.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE phone LIKE '6_2%'  
ORDER by LastName;   

Weitere Informationen

PATINDEX (Transact-SQL)
Ausdrücke (Transact-SQL)
Integrierte Funktionen (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)