Mysql
 sql >> Database >  >> RDS >> Mysql

Sostituzione PATINDEX() in MYSQL

Anche se non esiste un PATINDEX() formale funzione in MySQL che ottiene sia la ricerca del modello regex con l'indice dei caratteri restituito, sia una combinazione di LOCATE() e REGEXP() , considera una funzione definita dall'utente che scorre ogni carattere nella lunghezza di una stringa e controlla un REGEXP motivo sul personaggio. Una volta creata, usa tale funzione in linea di una query.

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

Interroga (cerca la prima cifra nella stringa)

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