sql >> Databáze >  >> RDS >> Mysql

Náhrada PATINDEX() v MYSQL

I když neexistuje žádný formální PATINDEX() funkce v MySQL, která dosahuje jak vyhledávání vzorů regulárních výrazů s vráceným indexem znaků, tak kombinace LOCATE() a REGEXP() , zvažte uživatelsky definovanou funkci, která prochází každý znak v délce řetězce a kontroluje REGEXP vzor na postavě. Po vytvoření použijte takovou funkci v řádku dotazu.

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

Dotaz (hledá první číslici v řetězci)

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


  1. Generování QR kódů z MySQL řádků

  2. Jak vytvořit omezení cizího klíče na více sloupcích v SQL Server - SQL Server / Výukový program TSQL, část 67

  3. MYSQL – rozdělení dat do více řádků

  4. PHP SQL STMT SELECT více LIKE ? je to možné?