Chociaż nie ma formalnej PATINDEX()
funkcja w MySQL, która osiąga zarówno wyszukiwanie wzorca regex ze zwróconym indeksem znaków, jak i kombinację LOCATE()
i REGEXP()
, rozważ funkcję zdefiniowaną przez użytkownika, która zapętla każdy znak długości łańcucha i sprawdza REGEXP
wzór na charakter. Po utworzeniu użyj takiej funkcji w wierszu zapytania.
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
Zapytanie (wyszukuje pierwszą cyfrę w ciągu)
SELECT mystring, PatIndex('[0-9]', mystring) As FirstNumberCharacter
FROM myTable