- 1 Section
- 10 Lessons
- unbegrenzt
- Reguläre Ausdrücke & Textverarbeitung10
- 1.1Was sind Reguläre Ausdrücke?
- 1.2Grundzeichen: Literale, Zeichenklassen, Quantoren
- 1.3Anker, Gruppen und Alternation
- 1.4Gierige vs. faule Quantoren
- 1.5Regex in Python: re-Modul
- 1.6Regex in JavaScript
- 1.7grep, sed, awk – Regex auf der Kommandozeile
- 1.8Regex für Validierung: E-Mail, IP, PLZ, Datum
- 1.9Regex in Datenbanken: LIKE, REGEXP
- 1.10Aufgaben Reguläre Ausdrücke
Regex in Datenbanken: LIKE, REGEXP
Wer mit SQL-Datenbanken arbeitet, kommt früher oder später an Pattern-Suche: „alle Kunden deren Name mit S anfängt", „alle E-Mails von @gmail.com", „alle PLZ aus der 78er-Region". SQL hat zwei Werkzeuge dafür: das einfache LIKE mit Wildcards, und das mächtigere REGEXP mit echten regulären Ausdrücken.
Diese Lektion zeigt beide, mit allen wichtigen Unterschieden zwischen den DB-Systemen. Denn anders als die Sprachen Python oder JavaScript kocht jede Datenbank ihre eigene Suppe: MySQL, PostgreSQL, SQL Server und Oracle haben jeweils eigene Syntax.
1) LIKE: das einfache Werkzeug
LIKE ist SQL-Standard – funktioniert in jeder relationalen Datenbank gleich. Es kennt nur zwei Wildcard-Zeichen: % für „beliebig viele Zeichen" und _ für „genau ein Zeichen". Mit nur diesen zwei Zeichen lässt sich erstaunlich viel ausdrücken:
LOWER(spalte) LIKE LOWER('%muster%') oder PostgreSQL's ILIKE.2) LIKE in Aktion
Praktische SQL-Queries mit LIKE:
3) Escape-Charakter bei LIKE
Was wenn du wörtlich nach % oder _ suchen willst? Mit ESCAPE-Klausel:
4) Wo LIKE an Grenzen stößt
LIKE ist einfach – aber begrenzt. Sachen die mit LIKE NICHT gehen:
- „Genau 5 Ziffern" – LIKE kann keine Ziffern von Buchstaben unterscheiden
- „Beginnt mit Zahl" – kein Zeichenklassen-Konzept
- „Optionaler Teil" – kein
?-Quantor - „Alternation A oder B" – kein
| - „Genau 3 Wiederholungen" – kein
{n}-Quantor
Für all das brauchst du REGEXP – die echten regulären Ausdrücke. Genau das ist Thema des nächsten Abschnitts.
5) REGEXP/RLIKE: echte Regex in SQL
Hier wird's interessant – und leider auch uneinheitlich je nach DB-System. Während LIKE überall gleich funktioniert, hat jede Datenbank ihre eigene REGEXP-Syntax. Übersicht:
col RLIKE '^[0-9]+$'
col ~* '^[0-9]+$'
col !~ '...' (Negation)
[a-z], [^a-z]
REGEXP_INSTR(col, ...)
REGEXP_REPLACE(col, ...)
[a-z] direkt im LIKE-Pattern. Für vollständige Regex in SQL Server: CLR-Funktion oder externer Code. Mit SQL Server 2025 wurde aber endlich auch REGEXP_LIKE/etc. eingeführt.6) REGEXP in MySQL/MariaDB
MySQL ist die wohl am häufigsten verwendete DB mit Regex-Support. Die Syntax ist einfach:
Wichtig: MySQL nutzt POSIX ERE – die meisten klassischen Regex-Features sind dabei, aber kein \d, \w, \s (das ist PCRE). Stattdessen [0-9], [a-zA-Z0-9_], [[:space:]]. Ab MariaDB 10.0+ wird PCRE genutzt – da geht auch \d.
7) REGEXP in PostgreSQL
PostgreSQL hat eine besonders elegante Syntax – mit Operatoren statt Keywords:
PostgreSQL's regexp_match gibt direkt ein Array mit den Capturing Groups zurück – perfekt für Extraktion. regexp_replace ist wie re.sub in Python. Mein persönlicher Favorit: das ~-Operator-Modell ist sehr kompakt und intuitiv.
8) Oracle: REGEXP_LIKE und Friends
Oracle macht alles mit Funktionen – sehr feature-reich, aber etwas länglich:
Oracle's vier Funktionen REGEXP_LIKE, REGEXP_SUBSTR, REGEXP_INSTR, REGEXP_REPLACE decken zusammen alles ab was du brauchst. Bei Oracle-DBs ist Regex sehr ausgereift.
9) Performance: das große Aber
WHERE email REGEXP '@firma' auf einer Tabelle mit 10 Millionen Usern dauert Minuten, während WHERE email LIKE '%@firma.de' mit einem geeigneten Index oder email = 'anna@firma.de' Millisekunden. Mehr zu Performance in K46 L8 DB-Debugging.Best Practices für Regex-Performance:
- Anker am Anfang:
'^abc'ist schneller als'abc'– Engine kann früher abbrechen - LIKE wenn möglich:
LIKE 'abc%'kann B-Tree-Index nutzen, REGEXP nicht - Spezifische Spalten: nicht
SELECT *, nur was du brauchst - Pre-filter mit anderen Bedingungen: erst
WHERE country = 'DE' AND plz REGEXP ...– Country-Filter reduziert die Daten enorm vor dem teuren Regex - Functional Indizes: PostgreSQL kann auf
CREATE INDEX ON users (lower(email))indizieren – dann istlower(email) LIKE '...'indexed - Materialisierte Views für teure Regex-Suchen die wiederholt vorkommen
- Validierung schon beim INSERT: lieber ein CHECK-Constraint mit Regex als jedes Mal SELECT mit Regex
10) CHECK-Constraints mit Regex
Eine elegante Anwendung von Regex in der DB: Datenintegrität direkt im Schema. Mit einem CHECK-Constraint sicherst du dass nie ungültige Daten in der DB landen:
Damit kann nie eine ungültige E-Mail oder PLZ in die DB. INSERT-Versuche schlagen fehl. Datenintegrität auf Schema-Ebene – kein Bug im Anwendungscode kann ungültige Daten reinschreiben. Sehr empfehlenswert für kritische Felder.
11) NoSQL und Regex
Auch MongoDB und andere NoSQL-DBs unterstützen Regex:
MongoDB nutzt PCRE – fast volle JavaScript-Regex-Syntax. Performance-Caveats wie bei SQL: ohne präfix-Anker kein Index, Full-Collection-Scan bei großen Datenmengen.
12) Praxis-Anwendungsfälle
Wo lohnt sich Regex in der DB wirklich?
- Datenqualitätsprüfung: „Wie viele ungültige E-Mails haben wir in der DB?" – einmaliger Report
- Data Cleaning: bestehende Daten mit REGEXP_REPLACE bereinigen (z.B. Telefonnummern vereinheitlichen)
- Filter auf seltene Felder: kleine Tabellen, einmalige Analysen
- CHECK-Constraints: Datenintegrität beim Schreiben
- Computed Columns: extrahierte Werte (z.B. Top-Level-Domain aus E-Mail) für schnellere Suche
Wo NICHT:
- Hot Path: Queries die hundertmal pro Sekunde laufen – lieber strukturieren
- Große Tabellen ohne Vorfilter: Full-Scan kann Stunden dauern
- Komplexe Validierung: lieber in Applikations-Code als in der DB
13) Vergleich: LIKE vs REGEXP
| Kriterium | LIKE | REGEXP |
|---|---|---|
| SQL-Standard | ✓ überall | ✗ DB-spezifisch |
| Wildcards | % und _ | Volle Regex-Syntax |
| Zeichenklassen | ✗ | ✓ [a-z], \d, \w |
| Quantoren | ✗ | ✓ +, *, {n,m} |
| Gruppen | ✗ | ✓ (...) |
| Alternation | ✗ | ✓ A|B |
| Anker | implizit (^ am Anfang) | ✓ ^ und $ |
| Index-Nutzung | Mit Präfix-LIKE möglich | Selten möglich |
| Performance | Schnell | Langsam bei Volltable-Scan |
| Komplexität | Sehr einfach | Volle Regex-Macht |
Faustregel: LIKE wenn möglich, REGEXP wenn nötig. Bei einfachen Mustern wie „beginnt mit", „endet mit", „enthält": LIKE. Bei komplexen Mustern mit Zeichenklassen, Quantoren oder Alternation: REGEXP.
Zusammenfassung
SQL hat zwei Pattern-Werkzeuge: LIKE (Standard, mit Wildcards % und _, einfach + indexfähig) und REGEXP (DB-spezifisch, mächtig, meist ohne Index). Syntax pro DB: MySQL REGEXP/RLIKE, PostgreSQL ~/~*/!~, Oracle REGEXP_LIKE(), SQL Server ältere Versionen ohne echten REGEXP. Performance: Regex umgeht meist Indizes – bei großen Tabellen langsam. Vorfilter mit anderen Bedingungen nutzen. CHECK-Constraints mit Regex sichern Datenintegrität direkt im Schema. Faustregel: LIKE wenn möglich, REGEXP wenn nötig.
