sql >> Base de Datos >  >> RDS >> Mysql

Reemplazo de PATINDEX() en MYSQL

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