Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PATINDEX()-Ersetzung in MYSQL

Während es kein formelles PATINDEX() gibt Funktion in MySQL, die sowohl die Regex-Mustersuche mit zurückgegebenem Zeichenindex als auch eine Kombination aus LOCATE() erreicht und REGEXP() , stellen Sie sich eine benutzerdefinierte Funktion vor, die jedes Zeichen in der Länge einer Zeichenfolge durchläuft und einen REGEXP überprüft Muster auf dem Charakter. Verwenden Sie nach der Erstellung eine solche Funktion innerhalb einer Abfrage.

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

Abfrage (sucht nach der ersten Ziffer in der Zeichenfolge)

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