SQL Academy
Premium
Funktionsreferenz

REGEXP_INSTR

Gibt die Position des Teilstrings zurück, der zu einem regulären Ausdruck passt.

MySQL 8.1
REGEXP_INSTR(expr, pattern[, pos[, occurrence[, return_option[, match_type]]]])

Parameter

exprVARCHAR
String, in dem gesucht wird
patternVARCHAR
Regulärer Ausdruck
posINToptional
Position, ab der gesucht wird, von 1 bis zur Länge des Strings, standardmäßig 1
occurrenceINToptional
Nummer des Treffers, standardmäßig 1 (der erste)
return_optionINToptional
Standardmäßig der Anfang des Treffers, bei 1 die Position direkt danach
Werte:01
match_typeVARCHARoptional
Flags wie bei REGEXP_LIKE, zum Beispiel c für die Beachtung von Groß- und Kleinschreibung

Rückgabewert

Ganze Zahl, die Position ab 1; 0, wenn es keinen Treffer gibt; NULL, wenn expr oder pattern NULL ist

Beispiele

Position der ersten Zahl

MySQL 8.1
SELECT REGEXP_INSTR('sql-academy-2024', '[0-9]+');
REGEXP_INSTR('sql-academy-2024', '[0-9]+')
13

Anfang und Ende der zweiten Zahl

MySQL 8.1
SELECT REGEXP_INSTR('a1b22c333', '[0-9]+', 1, 2) AS match_start,
	REGEXP_INSTR('a1b22c333', '[0-9]+', 1, 2, 1) AS after_match;
match_startafter_match
46

Adresse ohne Postleitzahl

MySQL 8.1
SELECT address,
	SUBSTRING(
		address,
		REGEXP_INSTR(address, '^[0-9-]+, ', 1, 1, 1)
	) AS without_zip
FROM Rooms
LIMIT 5;
addresswithout_zip
11218, Friel Place, New YorkFriel Place, New York
10018, 6th Avenue, New York6th Avenue, New York
10027, West 128th Street, New YorkWest 128th Street, New York
11238, Gates Avenue, New YorkGates Avenue, New York
10029, Park Avenue, New YorkPark Avenue, New York

Details

pos muss zwischen 1 und der Länge des Strings liegen: 0, eine negative Zahl oder eine Position hinter dem letzten Zeichen ergeben den Fehler «Index out of bounds in regular expression search», nicht 0.

Mit return_option = 1 gibt die Funktion die Position direkt nach dem Treffer zurück, und du kannst sie sofort an SUBSTRING übergeben, um den Text nach dem gefundenen Teil zu nehmen.

Siehe auch