【问题标题】:Find duplicate phone numbers (even if formatting differs)查找重复的电话号码(即使格式不同)
【发布时间】:2013-03-28 00:32:28
【问题描述】:

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

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

它看起来很难看,并且不考虑在具有电话号码的字段上出现字母数字字符的可能性。

还有更好的方法吗?

【问题讨论】:

  • 您想对重复项做什么 - 从数据库中删除它们?
  • @Revent,我想用它创建一个报告。
  • @pst,不,没有。
  • sql clr 函数,因此您可以使用 .net 来规范手机将为您提供更多工具

标签: mysql sql


【解决方案1】:

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

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

【讨论】:

  • 我遇到了那个解决方案。看起来也不那么好。替换比我想象的要快得多。
【解决方案2】:

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

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

【讨论】:

  • 这样可以防止问题无法解决。我知道这一点。谢谢。
猜你喜欢
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 2011-02-20
  • 2023-03-21
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多