sql >> Database >  >> RDS >> Mysql

PATINDEX() vervanging in MYSQL

Hoewel er geen formele PATINDEX() . is functie in MySQL die zowel de regex-patroonzoekopdracht met de geretourneerde tekenindex bereikt, of een combinatie van LOCATE() en REGEXP() , overweeg een door de gebruiker gedefinieerde functie die door elk teken in de lengte van een tekenreeks loopt en een REGEXP controleert patroon op het personage. Eenmaal aangemaakt, gebruik zo'n functie in-line van een 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

Query (zoekt naar eerste cijfer in string)

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


  1. Interfacefout (0, '')

  2. Mysql delete-instructie met limiet

  3. MySQL Damerau-Levenshtein Fuzzy mengen met Like Wildcard

  4. Hoe decimaal op te slaan in MySQL?