我在从数据库中选择字符串时遇到问题。问题是如果您在行中 +(123)-4 56-7 ,如果您使用字符串 1234567 进行搜索,则无法找到任何结果。有什么建议吗?
答案 0 :(得分:0)
您可以使用REPLACE()方法删除mysql中的特殊字符,但不知道它是否非常高效。但它应该有用。
答案 1 :(得分:0)
使用替换函数进行查询 -
select * from phoneTable where replace(replace(replace(phone, '+', ''), '-', ''), ')', '(') LIKE '%123%'
答案 2 :(得分:0)
SO中已经有另一个主题涉及一个非常相似的问题,请参阅here。
如果总是这种模式你正在搜索,而你的表格相当大,我建议反对REPLACE()
或REGEX()
- 如果调整得当,那将会完成这项工作。
最好添加一个包含普通电话号码的列,它根本不包含任何格式化字符数据 - 甚至更好,是电话号码的哈希值。这样,您可以向新列添加索引并对其进行搜索。从数据库的角度来看,这更容易,也更快。
答案 3 :(得分: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%;