0

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

4

4 回答 4

0

使用替换功能查询 -

select * from phoneTable where replace(replace(replace(phone, '+', ''), '-', ''), ')', '(') LIKE '%123%'
于 2012-05-14T07:03:19.063 回答
0

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

如果您总是在搜索这种模式,并且您的表相当大,我建议您反对REPLACE()or REGEX()- 如果调整得当,哪个 ofc 将完成这项工作。

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

于 2012-05-14T07:04:20.843 回答
0

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

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%;
于 2012-05-14T07:06:20.310 回答
0

您可以使用REPLACE()方法来删​​除 mysql 中的特殊字符,但不知道它是否非常有效。但它应该工作。

于 2012-05-14T06:59:46.500 回答