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 buscaVARCHAR
- pattern
- Expresión regularVARCHAR
- pos
- Posición desde la que se busca, de 1 a la longitud de la cadena; por defecto, 1INTOpcional
- 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, 0INTOpcional01
- match_type
- Indicadores de coincidencia; se pueden combinarVARCHAROpcionalcimnu
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]+');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;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;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.