MySQL专栏:将现有的电话号码更改为特定格式?

时间:2016-01-05 22:24:29

标签: mysql phone-number

我有一个包含电话号码的MySQL列,问题是它们的格式不同,例如:

  • 2125551212
  • 212-555-1212
  • (212)5551212

我想知道是否可以取现有的10位数,删除格式,并将其全部更改为以下格式:(212)555-1212

不重复,因为我希望更新数千个条目而不是屏蔽新条目。

1 个答案:

答案 0 :(得分:8)

不幸的是,REGEXP_MATCHES()TRANSLATE()函数没有附带标准MySQL安装(他们使用Postgres),所以你可以这样做,我觉得很脏,但它的工作原理。

  1. 首先,您使用replace()
  2. 删除不是数字的字符来清理列
  3. 然后,您使用substr()
  4. 将字符串的几个部分分开
  5. 最后,您将它们连接在子字符串与concat()
  6. 之间添加符号

    如果您还有其他需要截断的字符,只需在已存在的3个字符之上添加另一个replace()

    示例数据

    create table nums ( num text );
    
    insert into nums values 
        ('2125551212'),
        ('212-555-1212'),
        ('(212)5551212');
    

    查询格式化数据

    select 
      num, 
      concat('(',substr(num_cleansed,1,3),') ',substr(num_cleansed,4,3),'-',substr(num_cleansed,7)) AS num_formatted
    from (
      select 
        num, 
        replace(replace(replace(num,'(',''),')',''),'-','') as num_cleansed
      from nums
      ) foo
    

    <强>结果

    num             num_formatted
    2125551212      (212) 555-1212
    212-555-1212    (212) 555-1212
    (212)5551212    (212) 555-1212
    

    点击此处 SQLFiddle 预览输出。

    我要留下UPDATE声明作为读者的家庭作业。