REGEXP_REPLACE
Ersetzt die Substrings, die zu einem regulären Ausdruck passen, durch den angegebenen String.
PostgreSQL 17.9
REGEXP_REPLACE(source, pattern, replacement[, start[, occurrence]][, flags])- [ ]optionaler Teil
- source
- Ausgangsstringtext
- pattern
- Regulärer Ausdrucktext
- replacement
- String, der anstelle des Treffers eingesetzt wirdtext
- start
- Position, ab der gesucht wird, standardmäßig 1integerOptional
- occurrence
- Nummer des zu ersetzenden Treffers, 0 für alle Treffer, standardmäßig der ersteintegerOptional
- flags
- Flags, zum Beispiel 'gi' für alle Treffer ohne Beachtung der Groß- und KleinschreibungtextOptionalbcegimnpqstwx
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.9
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.9
SELECT REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2);Datumsteile umstellen
PostgreSQL 17.9
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.9
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.