MySQL选择查询以忽略特殊字符

时间:2017-11-06 05:29:34

标签: mysql sql

例如在专栏"公司":

+---------------+
|company        |
+---------------+
|MyCompany, Inc.|
+---------------+

假设用户只是键入" MyCompany Inc"进入没有昏迷和句号的搜索查询。

如何制作仍会返回的MySQL Select查询" MyCompany,Inc。" ?

不仅仅是昏迷和时期,但必须忽略所有特殊字符。

1 个答案:

答案 0 :(得分:3)

你必须创建mysql函数 -

 CREATE FUNCTION `removeSpacialChar`(`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) >= 48 AND ASCII(c) <= 57) OR (ASCII(c) >= 65 AND ASCII(c) <= 90) OR (ASCII(c) >= 97 AND ASCII(c) <= 122) THEN
                      SET out_str = CONCAT(out_str, c); 
                  ELSE
                      SET out_str = CONCAT(out_str, '');   
                  END IF; 

                  SET pointer = pointer + 1; 
            END WHILE; 
      END IF; 

      RETURN out_str; 
END

现在您运行以下查询

SELECT removeSpacialChar('abc&*&*%^ %*^*%^,--&*&^^%^%^^&^%%^%$$#%@#$@$@!@$!123');

输出: -

ABC123