Cześć Chcę wyszukać ciąg znaków, uciekając znaki specjalne za pomocą zapytania Like.
Mój ciąg to - abc i abc
Wartość kolumny to - abc i abc
Jakoś nie chcę uwzględniać znaków specjalnych w tej funkcji wyszukiwania.
Mogę uciec od mojego ciągu za pomocą REGEX
używając preg_replace with /[^A-Za-z0-9-]/
To, czego chcę, to funkcja mysql, która może zastąpić wartość kolumny tylko w celu uzyskania wyniku wyszukiwania, ale nie powinna aktualizować wartości kolumny.
Więc przekażę ciąg abc abc i dopasuje kolumnę do wartości abc abc.
Wirtualnie - SELECT * FROM MyTable WHERE myColumn LIKE "abc abc";
i powinno dać mi wynik.
Odpowiedzi:
0 dla odpowiedzi № 1DROP FUNCTION IF EXISTS RemoveSpecialChar;
DELIMITER $
CREATE FUNCTION RemoveSpecialChar(in_str VARCHAR(4096)) RETURNS VARCHAR(4096) CHARSET utf8
BEGIN
DECLARE out_str VARCHAR(4096) DEFAULT "";
DECLARE c VARCHAR(4096) DEFAULT "";
DECLARE pointer INT DEFAULT 1;
IF ISNULL(in_str) THEN
RETURN NULL;
ELSE
WHILE pointer <= LENGTH(in_str) DO
SET c = MID(in_str, pointer, 1);
IF ASCII(c) NOT IN(35, 38,37, 42, 64, 94) THEN
SET out_str = CONCAT(out_str, c);
END IF;
SET pointer = pointer + 1;
END WHILE; END IF;
RETURN out_str;
END$
DELIMITER ;
poniższe zapytanie działa
SELECT RemoveSpecialChar(loginPass) FROM users
Musisz dodać wartość ascii wszystkich wymaganych znaków poniżej, jeśli funkcja
IF ASCII(c) NOT IN(35, 38,37, 42, 64, 94) THEN
Więc twoje zapytanie będzie
SELECT * FROM MyTable WHERE myColumn LIKE RemoveSpecialChar("abc & abc")