首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效匹配电话号码

问有效匹配电话号码
EN

Database Administration用户
提问于 2018-05-02 13:27:40
回答 2查看 5.6K关注 0票数 5

对于移动应用程序,我们正在考虑根据用户的移动电话号码进行验证。

在应用程序中,我们将限制用户输入,以便以下列格式存储:

  • +46700112233

这意味着在这种情况下,瑞典的电话号码(+46),删除初始的0,然后保留其余的9位数字(这里的移动电话号码是10位,包括前面的0)。

但是,目前保存在数据库中的数据包含很多行,输入时不进行验证。这意味着保存的数字可以采用许多不同的格式,包括

  • 0700112233
  • 070-0112233
  • 460700112233,等等。

因此,数据库中列的类型可能是varchar。

此时,我无法将数据库中已经保存的数字实际更新为一种通用格式,例如使用降钙素。我也希望将实际查询的数量限制在数据库上。

该数据库目前包括大约10+国家的电话号码,所有这些国家都以不同的格式保存。所使用的数据库管理系统是MySQL。

在不查询数据库中任何可能的格式的情况下,怎样才能准确匹配数字呢?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2018-05-02 17:11:23

这可能是一场闹剧。我首先使用替换函数来清除所有的('(',')','-')垃圾。您也可以将其添加到通用中,尽管这将更加困难。看起来会是这样的:

代码语言:javascript
复制
    select replace(replace(replace(p.phone,'-',''),'(',''),')','') 
    from people p

若要使每一个数字10位数,如果它较短,则左侧为零,您可以这样做:

代码语言:javascript
复制
    select right( '0000000000' + replace(replace(replace(p.phone,'-',''),'(',''),')',''),10)
    from people p  

至于国家代码..。理想情况下,它们将出现在自己的专栏中,但您可以在之后将它们添加到如下内容中:

代码语言:javascript
复制
    select '011' + right( '0000000000' + replace(replace(replace(p.phone,'-',''),'(',''),')',''),10)
    from people p
    where country = 'America'

整件事情应该是这样的(如果它是一张很大的桌子,可以分批处理它):

代码语言:javascript
复制
    select * into people_bak from people

     update p
     set Phone = 
    '011' + right( '0000000000' + replace(replace(replace(p.phone,'-',''),'(',''),')',''),10)
    from people p
    where country = 'America'

    select PostalCode, * from people
票数 0
EN

Database Administration用户

发布于 2018-05-19 13:53:43

正确的做法是在数据进入时进行修复。然后只有“规范”格式的数字字符串。这包括以国家代码作为前缀。(不过,您可能希望保留前面的“+”,这样查看数据库的用户就会知道国家代码在那里。)

如果必须重复修正SELECT端的数字,则无法获得合理的性能。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/205568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档