sql >> Databasteknik >  >> RDS >> Mysql

PATINDEX()-ersättning i MYSQL

Även om det inte finns någon formell PATINDEX() funktion i MySQL som uppnår både regexmönstersökningen med returnerat teckenindex, eller en kombination av LOCATE() och REGEXP() , överväg en användardefinierad funktion som går igenom varje tecken i längden av en sträng och kontrollerar en REGEXP mönster på karaktären. När du har skapat den, använd en sådan funktion direkt i en fråga.

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

Fråga (söker efter första siffran i strängen)

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


  1. MySql:Tinyint (2) vs tinyint(1) - vad är skillnaden?

  2. Bästa designmönstret för att stänga databasanslutning när undantag inträffar

  3. PHP - MYSQL - testdatabasserver

  4. INSTR() Funktion i Oracle