2

我正在使用以下查询从表中选择重复的电话号码。

SELECT id, REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( phone, "+", '' ) , ")", '' ) , "(", '' ) , "-", '' ) , ' ', '' ) AS strippedPhone
FROM `customers`
GROUP BY strippedPhone
HAVING count( strippedPhone ) >1
LIMIT 0 , 300

它看起来很难看,并且没有考虑到电话号码字段中字母数字字符的可能性。

还有更好的方法吗?

4

2 回答 2

0

在我看来,您将在将电话号码存储到数据库之前对其进行规范化。无论格式如何,任何能够比较电话号码的 sql 查询都将非常低效。如果您在将电话号码插入数据库之前重新格式化电话号码,检查重复号码是微不足道的。

如果要在现有数据库上执行此操作,则必须首先对数据库中的数据进行规范化,但这只需执行一次。

于 2013-03-28T00:49:02.993 回答
0

这个 StackOverflow post MySQL strip non-numeric characters to compare有一个使用 NumericOnly 函数的解决方案。

http://venerableagents.wordpress.com/2011/01/29/mysql-numeric-functions/

于 2013-03-28T00:38:27.057 回答