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

PATINDEX()-erstatning i MYSQL

Mens der ikke er nogen formel PATINDEX() funktion i MySQL, der opnår både regex-mønsteropslag med returneret tegnindeks eller en kombination af LOCATE() og REGEXP() , overvej en brugerdefineret funktion, der går gennem hvert tegn i længden af ​​en streng og kontrollerer en REGEXP mønster på karakteren. Når den er oprettet, skal du bruge en sådan funktion in-line i en forespørgsel.

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

Forespørgsel (søger efter første ciffer i streng)

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


  1. Hvordan udfører man IF-sætning i SQL?

  2. Nul nedetid netværksmigrering med MySQL Galera Cluster ved hjælp af relay node

  3. SLET alle dublerede emner med få betingelser

  4. Hvilken hierarkisk model skal jeg bruge? Tilgrænsende, indlejret eller opregnet?