Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Substituição de PATINDEX() no MYSQL


Embora não haja um PATINDEX() formal função no MySQL que obtém a pesquisa de padrão regex com o índice de caracteres retornado ou uma combinação de LOCATE() e REGEXP() , considere uma função definida pelo usuário que percorre cada caractere no comprimento de uma string e verifica um REGEXP padrão no personagem. Uma vez criado, use tal função em linha de uma 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 (pesquisa o primeiro dígito na string)
SELECT mystring, PatIndex('[0-9]', mystring) As FirstNumberCharacter
FROM myTable