MySQL搜索 - 从列中转义特殊字符

时间:2014-12-09 10:40:43

标签: php mysql regex string

您好我想通过使用Like查询转义特殊字符来搜索字符串。

我的字符串 - abc& ABC

列值 - abc& ABC

不知何故,我不想在此搜索功能中包含特殊字符。

我可以使用REGEX

使用preg_replace with /[^A-Za-z0-9\-]/转义我的字符串

我想要的是一些mysql函数,它可以替换仅用于获取搜索结果的列值,但不应更新列值。

所以我将传递abc abc字符串,它将匹配具有值abc abc的列。

实际上 - SELECT * FROM MyTable WHERE myColumn LIKE 'abc abc';

它应该给我结果。

1 个答案:

答案 0 :(得分: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')