Referencia de funciones

REGEXP_INSTR

Devuelve la posición de la subcadena que coincide con una expresión regular.

MySQL 8.4
REGEXP_INSTR(expr, pattern[, pos[, occurrence[, return_option[, match_type]]]])
  • [ ]parte opcional
expr
Cadena en la que se busca
VARCHAR
pattern
Expresión regular
VARCHAR
pos
Posición desde la que se busca, de 1 a la longitud de la cadena; por defecto, 1
INTOpcional
occurrence
Número de la coincidencia; por defecto, 1 (la primera)
INTOpcional
return_option
0 para el inicio de la coincidencia, 1 para la posición siguiente a ella; por defecto, 0
INTOpcional
01
match_type
Indicadores de coincidencia; se pueden combinar
VARCHAROpcional
cimnu

Valor devuelto

Número entero, la posición empezando por 1; 0 si no hay coincidencia; NULL si expr o pattern es NULL

Ejemplos

Posición del primer número

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

Inicio y fin del segundo número

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

Dirección sin código postal

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

Detalles

pos debe estar entre 1 y la longitud de la cadena: 0, un número negativo o una posición posterior al último carácter dan el error «Index out of bounds in regular expression search», no 0.

Con return_option = 1, la función devuelve la posición justo después de la coincidencia, y puedes pasarla directamente a SUBSTRING para tomar el texto que hay después del fragmento encontrado.

Véase también