REGEXP_REPLACE
Ersetzt die Substrings, die zu einem regulären Ausdruck passen, durch den angegebenen String.
PostgreSQL 17.5
REGEXP_REPLACE(source, pattern, replacement[, start[, occurrence]][, flags])Parameter
- sourcetext
- Ausgangsstring
- patterntext
- Regulärer Ausdruck
- replacementtext
- String, der anstelle des Treffers eingesetzt wird
- startintegeroptional
- Position, ab der gesucht wird, standardmäßig 1
- occurrenceintegeroptional
- Nummer des zu ersetzenden Treffers, 0 für alle Treffer, standardmäßig der erste
- flagstextoptional
- Flags: g ersetzt alle Treffer, i ignoriert Groß- und Kleinschreibung
Rückgabewert
String mit Ersetzung; ohne Flag g und ohne occurrence wird nur der erste Treffer ersetzt
Beispiele
Ersetzen mit und ohne Flag g
PostgreSQL 17.5
SELECT REGEXP_REPLACE('sql-academy-2024', '[0-9]', '*') AS first_only,
REGEXP_REPLACE('sql-academy-2024', '[0-9]', '*', 'g') AS all_matches;Nur die zweite Zahl ersetzen
PostgreSQL 17.5
SELECT REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2);Datumsteile umstellen
PostgreSQL 17.5
SELECT REGEXP_REPLACE(
'2024-03-08',
'([0-9]{4})-([0-9]{2})-([0-9]{2})',
'\3.\2.\1'
);Leerzeichen in Namen zu Unterstrichen
PostgreSQL 17.5
SELECT good_name,
REGEXP_REPLACE(good_name, ' ', '_', 'g') AS slug
FROM Goods
LIMIT 5;Details
In replacement kannst du einen Teil des Treffers aus Klammern einsetzen: \1 ist die erste Gruppe, \2 die zweite und \& der ganze Treffer. Ohne das Flag g wird nur der erste Treffer ersetzt. In MySQL werden standardmäßig alle Treffer ersetzt, und eine Gruppe schreibst du im Ersatz als $1.