我使用以下查询从表格中选择重复的电话号码。
SELECT id, REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( phone, "+", '' ) , ")", '' ) , "(", '' ) , "-", '' ) , ' ', '' ) AS strippedPhone
FROM `customers`
GROUP BY strippedPhone
HAVING count( strippedPhone ) >1
LIMIT 0 , 300
它看起来很丑陋,并没有考虑具有电话号码的字段上字母数字字符的可能性。
有更好的方法吗?
答案 0 :(得分:0)
此StackOverflow帖子MySQL strip non-numeric characters to compare有一个使用NumericOnly函数的解决方案。
http://venerableagents.wordpress.com/2011/01/29/mysql-numeric-functions/
答案 1 :(得分:0)
在我看来,您可以在将电话号码存储到数据库之前将其标准化。无论格式如何,任何能够比较电话号码的SQL查询都将是非常低效的。如果您在将电话号码插入数据库之前重新格式化电话号码,那么检查重复号码是很容易的。
如果要在现有数据库上执行此操作,则必须首先规范化数据库中的数据,但只需执行一次。