2014-12-09 4 views
-1

Привет Я хочу, чтобы поиск строки, экранируя специальные символы, используя запрос Like.Поиск в MySQL - escape специальных символов из столбца

Моя Строка - а & а

значение столбец - а & а

Как-то я не хочу включать в себя специальные символы в этой функции поиска.

я могу избежать моей строки, используя REGEX с помощью preg_replace with /[^A-Za-z0-9\-]/

Что я хочу некоторые MySQL функция, которая может заменить значение столбца для получения только результат поиска, но это не должно изменить значение столбца.

Итак, я передам строку abc abc, и она будет соответствовать столбцу со значением abc abc.

Практически - SELECT * FROM MyTable WHERE myColumn LIKE 'abc abc';

и он должен дать мне результат.

+0

в основном вы хотите игнорировать все специальные символы в каком месте? – Anil

+0

Да Вы правы – D3Systems

+0

Вам необходимо рассмотреть ваш вопрос. Сначала вы говорите об «побеге», а затем вы предлагаете «preg_replace» (escape! = Replace). Опять вы говорите об «поиске», а затем «не должны обновляться». – PauloASilva

ответ

0
DROP 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 ; 

ниже запрос работает

SELECT RemoveSpecialChar(loginPass) FROM users 

Вам нужно добавить значение ASCii всего необходимого символа в ниже, если функции

IF ASCII(c) NOT IN(35, 38,37, 42, 64, 94) THEN 

Таким образом, ваш запрос будет

SELECT * FROM MyTable WHERE myColumn LIKE RemoveSpecialChar('abc & abc') 
+0

Я успешно выполнил это. Теперь он дает мне ошибку - FUNCTION testdb.RemoveSpecialChar не существует – D3Systems

+0

обновил мой ответ, проверьте сейчас. Я также изменил определение функции. – Anil

Смежные вопросы