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