Ä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