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