SQL Academy
Premium
Funktionsreferenz

REGEXP_INSTR

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

MySQL 8.4
REGEXP_INSTR(expr, pattern[, pos[, occurrence[, return_option[, match_type]]]])
  • [ ]optionaler Teil
expr
String, in dem gesucht wird
VARCHAR
pattern
Regulärer Ausdruck
VARCHAR
pos
Position, ab der gesucht wird, von 1 bis zur Länge des Strings, standardmäßig 1
INTOptional
occurrence
Nummer des Treffers, standardmäßig 1 (der erste)
INTOptional
return_option
0 für den Anfang des Treffers, 1 für die Position danach; standardmäßig 0
INTOptional
01
match_type
Flags für den Abgleich, kombinierbar
VARCHAROptional
cimnu

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.4
SELECT REGEXP_INSTR('sql-academy-2024', '[0-9]+');
REGEXP_INSTR('sql-academy-2024', '[0-9]+')
13

Anfang und Ende der zweiten Zahl

MySQL 8.4
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.4
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