Mặc dù không có PATINDEX()
chính thức trong MySQL đạt được cả tra cứu mẫu regex với chỉ mục ký tự trả về hoặc kết hợp LOCATE()
và REGEXP()
, hãy xem xét một hàm do người dùng xác định lặp qua từng ký tự trong độ dài của một chuỗi và kiểm tra một REGEXP
hoa văn trên nhân vật. Sau khi được tạo, hãy sử dụng một hàm như vậy trong dòng truy vấn.
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
Truy vấn (tìm kiếm chữ số đầu tiên trong chuỗi)
SELECT mystring, PatIndex('[0-9]', mystring) As FirstNumberCharacter
FROM myTable