MySQL 列:将现有的 phone 数字更改为特定格式?

MySQL column: Change existing phone numbers into specific format?

我有一个包含 phone 个数字的 MySQL 列,问题是它们的格式不同,例如:

我想知道是否可以采用现有的 10 位数字,删除格式,并将它们全部更改为这种格式:(212) 555-1212

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

不幸的是,标准 MySQL installation (they do with Postgres) 没有 REGEXP_MATCHES()TRANSLATE() 函数,所以你可以用我觉得很脏的方式来做,但它确实有效。

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

如果您还有需要截断的字符,只需在已有的 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 声明作为 reader 的家庭作业。