Premium

LIKE-Operator

Der LIKE-Operator wird in Bedingungen verwendet, wenn du prüfen möchtest, ob ein String einem bestimmten Muster entspricht.

Angenommen, wir haben eine Tabelle Users mit dem Feld email:

MySQL 8.1
SELECT name, email FROM Users;
nameemail
Bruce Willisbarjam@hotmail.com
George Clooneytellis@me.com
Kevin Costnermetzzo@hotmail.com
Samuel L. Jacksonmoonlapse@outlook.com
Kurt Russellgator@live.com

Nehmen wir an, wir möchten alle Nutzer finden, deren Mail-Adresse zur Second-Level-Domain „hotmail“ gehört. Konkret sollen also nur die Datensätze ausgewählt werden, die folgender Bedingung entsprechen:

  • nach dem Zeichen „@“ folgt „hotmail“
  • nach „hotmail“ folgt das Zeichen „.“ und danach eine beliebige Zeichenfolge

Für solche nicht-trivialen Suchen in Stringfeldern brauchst du den LIKE-Operator.

Syntax

MySQL 8.1
... WHERE tabellen_feld [NOT] LIKE muster_string

Das Muster kann folgende Sonderzeichen enthalten:

ZeichenBeschreibung
%Eine beliebige Zeichenfolge (die Anzahl der Zeichen kann von 0 bis beliebig viele reichen)
_Ein einzelnes beliebiges Zeichen

So kann unsere Query, die Nutzer der Domain „hotmail“ findet, etwa so aussehen:

MySQL 8.1
SELECT name, email FROM Users
WHERE email LIKE '%@hotmail.%'
nameemail
Bruce Willisbarjam@hotmail.com
Kevin Costnermetzzo@hotmail.com
Jennifer Lopezbarjam@hotmail.com
Harrison Fordkostas@hotmail.com
Michael Douglastimtroyr@hotmail.com
Catherine Zeta-Jonesflakeg@hotmail.com

Beispiele

  • MySQL 8.1
    ... WHERE tabellen_feld LIKE 'text%'
    

    Passt auf alle Strings, die mit „text“ beginnen.

  • MySQL 8.1
    ... WHERE tabellen_feld LIKE '%text'
    

    Passt auf alle Strings, die auf „text“ enden.

  • MySQL 8.1
    ... WHERE tabellen_feld LIKE '_ext'
    

    Passt auf Strings der Länge 4, deren letzte drei Zeichen „ext“ sein müssen. Zum Beispiel „text“ und „next“.

  • MySQL 8.1
    ... WHERE tabellen_feld LIKE 'begin%end'
    

    Passt auf Strings, die mit „begin“ beginnen und mit „end“ enden.

In MySQL sind die Muster standardmäßig nicht zwischen Groß- und Kleinschreibung unterscheidend.

In PostgreSQL unterscheiden die Muster zwischen Groß- und Kleinschreibung. Für eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung verwendest du den Operator ILIKE.

Sonderzeichen escapen

Manchmal willst du Strings finden, in denen % oder _ Teil des eigentlichen Textes sind und nicht Bestandteil des Musters. In solchen Fällen musst du diese Zeichen escapen.

In LIKE-Mustern wird standardmäßig der Backslash \ zum Escapen verwendet. Wenn du etwa die IDs der Tasks finden willst, deren Fortschritt genau 3% beträgt, kannst du das so schreiben:

MySQL 8.1
SELECT job_id FROM Jobs
WHERE progress LIKE '3\%';

ESCAPE-Zeichen

Wenn du statt des Standardzeichens ein anderes Escape-Zeichen verwenden möchtest, kannst du es mit ESCAPE explizit angeben.

Syntax mit ESCAPE

MySQL 8.1
... WHERE tabellen_feld LIKE 'muster_string' ESCAPE 'escape_zeichen'

Dieselbe Query lässt sich mit explizit angegebenem Escape-Zeichen auch so schreiben:

MySQL 8.1
SELECT job_id FROM Jobs
WHERE progress LIKE '3!%' ESCAPE '!';

Hier übernimmt ! dieselbe Rolle wie \ im vorherigen Beispiel.

Interaktive Übung

Jetzt vertiefen wir das Gelernte mit einer kleinen Übung! In der Aufgabe unten sollst du E-Mail-Adressen den passenden LIKE-Mustern zuordnen, indem du sie in die entsprechenden Felder ziehst.

Interaktive Übung nicht verfügbar

Für die interaktive Übung wird eine Bildschirmbreite von mindestens 600 Pixeln benötigt. Öffne diese Seite auf einem Computer oder Tablet.