MySQL选择查询忽略特殊字符

标签 mysql sql

以“公司”列为例:

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

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

如何进行仍会返回“MyCompany, Inc.”的 MySQL Select 查询? ?

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

最佳答案

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

关于MySQL选择查询忽略特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47130290/

相关文章:

mysql - 使用 Flyway 时的幂等迁移

python - - 在Python中通过MySQL的计数找到top x?

MySQL如何计算一个整数适合另一个数字的次数以及剩下的内容

sql - 在 Oracle 中重命名 View

php - MySQL “NOT IN” 查询3张表

php - 用于对重复项进行分组和计数的 SQL 语句

Mysql 对两个不同表的计数和求和

mysql - SQL中Sum字段的计算

php - 快速生成随机 MySQL 行并多次运行相同的 sql 查询

带表名的 MySql 联合查询