【问题标题】:MySQL selecting string with multi special charactersMySQL选择具有多个特殊字符的字符串
【发布时间】:2012-05-14 06:56:15
【问题描述】:

我在从数据库中选择字符串时遇到问题。问题是如果您在行中有 +(123)-4 56-7 并且如果您使用字符串 1234567 进行搜索,它将找不到任何结果。有什么建议吗?

【问题讨论】:

  • 如果你有你的答案然后点击接受:)

标签: mysql


【解决方案1】:

你可以使用REPLACE()方法来去除mysql中的特殊字符,不过不知道是不是很高效。但它应该可以工作。

【讨论】:

    【解决方案2】:

    SO 中已经有另一个线程涵盖了一个非常相似的问题,请参阅here

    如果您搜索的总是这种模式,并且您的表相当大,我建议不要使用 REPLACE()REGEX() - 如果调整得当,哪个 ofc 可以完成这项工作。

    最好添加一个包含普通电话号码的列,该列根本不包含任何格式化字符数据 - 甚至更好的是电话号码的哈希值。这样,您可以将索引添加到新列并对此进行搜索。从数据库的角度来看,这更容易,也更快。

    【讨论】:

      【解决方案3】:

      您可以使用用户定义函数从字符串中获取数值。

      CREATE FUNCTION GetNumeric (val varchar(255)) RETURNS tinyint 
       RETURN val REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';
      
      CREATE FUNCTION GetNumeric (val VARCHAR(255)) 
       RETURNS VARCHAR(255)
      BEGIN
       DECLARE idx INT DEFAULT 0;
       IF ISNULL(val) THEN RETURN NULL; END IF;
      
       IF LENGTH(val) = 0 THEN RETURN ""; END IF;
      
       SET idx = LENGTH(val);
        WHILE idx > 0 DO
        IF IsNumeric(SUBSTRING(val,idx,1)) = 0 THEN
         SET val = REPLACE(val,SUBSTRING(val,idx,1),"");
         SET idx = LENGTH(val)+1;
        END IF;
        SET idx = idx - 1;
        END WHILE;
        RETURN val;
       END;
      

      然后

      Select columns from table
      where GetNumeric(phonenumber) like %1234567%;
      

      【讨论】:

        【解决方案4】:

        使用替换函数作为查询 -

        select * from phoneTable where replace(replace(replace(phone, '+', ''), '-', ''), ')', '(') LIKE '%123%'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-04
          • 1970-01-01
          • 2011-04-11
          • 2012-09-07
          • 1970-01-01
          相关资源
          最近更新 更多