Si bien no existe un PATINDEX()
formal función en MySQL que logra tanto la búsqueda de patrones de expresiones regulares con el índice de caracteres devueltos, o una combinación de LOCATE()
y REGEXP()
, considere una función definida por el usuario que recorre cada carácter en la longitud de una cadena y verifica un REGEXP
patrón en el personaje. Una vez creada, utilice dicha función en línea con una consulta.
DROP FUNCTION IF EXISTS PatIndex;
DELIMITER $$
CREATE FUNCTION PatIndex(pattern VARCHAR(255), tblString VARCHAR(255)) RETURNS INTEGER
DETERMINISTIC
BEGIN
DECLARE i INTEGER;
SET i = 1;
myloop: WHILE (i <= LENGTH(tblString)) DO
IF SUBSTRING(tblString, i, 1) REGEXP pattern THEN
RETURN(i);
LEAVE myloop;
END IF;
SET i = i + 1;
END WHILE;
RETURN(0);
END
Consulta (busca el primer dígito en la cadena)
SELECT mystring, PatIndex('[0-9]', mystring) As FirstNumberCharacter
FROM myTable