Mysql
 sql >> Base de données >  >> RDS >> Mysql

Remplacement de PATINDEX() dans MYSQL

Bien qu'il n'y ait pas de PATINDEX() formel fonction dans MySQL qui réalise à la fois la recherche de modèle regex avec l'index de caractère retourné, ou une combinaison de LOCATE() et REGEXP() , considérez une fonction définie par l'utilisateur qui parcourt chaque caractère de la longueur d'une chaîne et vérifie un REGEXP motif sur le personnage. Une fois créée, utilisez une telle fonction en ligne d'une requête.

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

Requête (recherche le premier chiffre de la chaîne)

SELECT mystring, PatIndex('[0-9]', mystring) As FirstNumberCharacter
FROM myTable