【问题标题】:MySQL select query to ignore special charactersMySQL选择查询忽略特殊字符
【发布时间】:2018-04-18 05:21:27
【问题描述】:

以“公司”列为例:

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

假设用户只是在搜索查询中键入“MyCompany Inc”,没有逗号和句号。

如何创建仍返回“MyCompany, Inc.”的 MySQL Select 查询?

不仅是逗号和句号,所有特殊字符都必须忽略。

【问题讨论】:

  • 我的意思是您想从公司列中搜索 MyCompany 并且您需要忽略其他字符。我说的对吗?
  • 是的。忽略特殊字符,因为通常用户不知道公司名称中是否包含特殊字符。
  • 为什么不在查询语句中使用Like
  • 米吉。在这种情况下,您如何喜欢查询?像“%MyCompany Inc%”这样的公司在哪里?或者像“MyCompany Inc”这样的公司?他们空手而归。

标签: mysql sql


【解决方案1】:

你必须创建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

【讨论】:

  • 表中有几百万行,数据库引擎发疯了。
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2013-12-11
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
相关资源
最近更新 更多