我需要在数据库中搜索一个电话号码。
但是,我不知道电话号码是如何存储在数据库中的,这可以采用不同的方式,例如:
0123456789
012 3456789
012 34 56 78 9
012-3456789
我必须寻找的字符串总是格式化为
0123456789
我的查询现在看起来像:
SELECT * FROM account WHERE phonenumber = '0123456789'
但是这种情况只有在将电话号码格式化为搜索字符串时才有效。
如何使用其他函数的正则表达式来搜索所有类型的格式化的语音?
答案 0 :(得分: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。
答案 1 :(得分:0)
使用Mysql REGEXP。这是您如何实现这一目标的基本示例。适用于您的示例中的每种数字格式。 想想更好的正则表达式更精确。
SELECT * FROM account WHERE phonenumber REGEXP '012( |-|)34( |)56( |)78( |)9';