SQL Academy
Premium
Funktionsreferenz

REGEXP_REPLACE

Ersetzt die Treffer eines regulären Ausdrucks durch einen anderen String.

MySQL 8.1
REGEXP_REPLACE(expr, pattern, replacement[, pos[, occurrence[, match_type]]])

Parameter

exprVARCHAR
Ausgangsstring
patternVARCHAR
Regulärer Ausdruck
replacementVARCHAR
String, der anstelle des Treffers eingesetzt wird
posINToptional
Position, ab der gesucht wird, von 1 bis zur Länge des Strings + 1, standardmäßig 1
occurrenceINToptional
Nummer des zu ersetzenden Treffers, standardmäßig 0 (alle Treffer)
match_typeVARCHARoptional
Flags wie bei REGEXP_LIKE, zum Beispiel c für die Beachtung von Groß- und Kleinschreibung

Rückgabewert

String mit ersetzten Treffern; der Ausgangsstring, wenn es keine Treffer gibt; NULL, wenn expr, pattern oder replacement NULL ist

Beispiele

Alle Ziffern ersetzen

MySQL 8.1
SELECT REGEXP_REPLACE('sql-academy-2024', '[0-9]', '*');
REGEXP_REPLACE('sql-academy-2024', '[0-9]', '*')
sql-academy-****

Nur die zweite Zahl ersetzen

MySQL 8.1
SELECT REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2);
REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2)
a1b*c333

Datumsteile umstellen

MySQL 8.1
SELECT REGEXP_REPLACE(
		'2024-03-08',
		'([0-9]{4})-([0-9]{2})-([0-9]{2})',
		'$3.$2.$1'
	);
REGEXP_REPLACE('2024-03-08', '([0-9]{4})-([0-9]{2})-([0-9]{2})', '$3.$2.$1')
08.03.2024

Nur die Ziffern der Telefonnummer

MySQL 8.1
SELECT name,
	REGEXP_REPLACE(phone_number, '[^0-9]', '') AS digits
FROM Users
LIMIT 5;
namedigits
Bruce Willis12025550128
George Clooney12025550145
Kevin Costner12025550197
Donald Sutherland12025550161
Jennifer Lopez12025550145

Details

In replacement kannst du einen Teil des Treffers aus Klammern einsetzen: $1 ist die erste Gruppe, $2 die zweite und so weiter. pos muss zwischen 1 und der Länge des Strings + 1 liegen: Bei 0 und bei einem größeren Wert gibt die Funktion einen Fehler aus.

Siehe auch