0

我需要在数据库中搜索电话号码。
但是,我不知道电话号码是如何存储在数据库中的,这可以采用不同的方式,例如:

  0123456789 
  012 3456789 
  012 34 56 78 9 
  012-3456789

我必须寻找的字符串总是格式化为

 0123456789

我的查询现在看起来像:

SELECT * FROM account WHERE phonenumber = '0123456789'

但这当然只有在电话号码的格式类似于搜索字符串时才有效。
如何使用其他功能的正则表达式来搜索各种格式化的电话号码?

4

2 回答 2

0

虽然可以在 MySql 中执行 REGEXP,但我认为它不是一个非常可靠的解决方案,并且表达式将难以调整。

SELECT * FROM account WHERE phonenumber REGEXP '^([0-9]{1}( |-|)){9}[0-9]{1}$'

一个测试表达式的好工具是这个站点:http ://www.spaweditor.com/scripts/regex/index.php

诀窍是在您输入数据库之前规范化您的数据,这意味着去除所有非数字字符的电话号码。

您还需要修复表中已有的数字。

最好的方法是将数据归一化存储,即:Country + area + number 分别存储。

于 2013-04-04T11:38:10.627 回答
0

使用 Mysql 正则表达式。这是您如何实现这一目标的基本示例。适用于您示例中的每种数字格式。考虑更好的正则表达式更精确。

SELECT * FROM account WHERE phonenumber REGEXP '012( |-|)34( |)56( |)78( |)9';
于 2013-04-04T11:38:40.880 回答