|
|
1
1
因为我不知道你在找什么RDBMS,我将给出最通用的方法:
这假设所有电话号码的长度至少相等(以数字表示)。 |
|
|
2
5
如果你能改变表格(假设它是 SQL Server 2005 向上),您可以向表中添加一个计算列,并将其持久化。此列可以保存“已清理”的“电话号码”字段表示。 像这样:
然后:
现在,您的“cleaned phone”列将始终包含您的电话号码的“cleaned up”版本-始终类似于:555123456。 因为它是一个持久化字段,所以在查询时也不会受到性能惩罚——该值是创建并存储在表中的,并且可以作为普通列使用。 在这个问题上,您现在可以很容易地查询了。 马克 |
|
|
3
5
在
在
或者,如果要查看标准化的电话值,
但是,最好为规范化的电话值创建另一列,将其填充到触发器中并编制索引,以便更有效地查询。 |
|
|
4
3
您可以尝试如下操作:
用空字符串替换任何非数字值。 |
|
|
5
1
或者,您可以修复数据输入页,以便在进入数据库之前删除所有非数字字符,然后修复所有现有数据以删除数字。然后对要求所有字符都是数字的字段进行约束。然后,您不必每次想显示电话号码时都一直寻找非数字字符,您可以轻松地让用户界面以您喜欢的任何格式一致地显示它们。在可能的情况下,解决问题(即您没有在用户界面中放置适当的控件)比创建解决方法要好,后者通常会毫无理由地导致性能下降。 |
|
|
6
0
我采用了@eric的概念,并使用了一些PHP代码,这将适用于任何电话号码输入。(假设$\u get有电话号码输入)
这将导致$phone_格式的值看起来像“%x%x%x%x%x%x%x%x%x%x%”,其中x是任意数字。 现在可以使用SQL查询:
如果输入1231231234,它将匹配123-123-1234,(123)123-1234等变体。 如果您想更进一步,您还可以从$ou get['phone']值中删除所有非数字字符(删除括号、短划线和空格),这样(123)123-1234之类的输入也将匹配上述所有情况。 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
Marc Guillot · 记录值时忽略冲突 1 年前 |
|
|
Fachry Dzaky · 正确使用ROW_NUMBER 1 年前 |
|
|
TriumphTruth · 从满足特定条件的数据集中选择1行 1 年前 |