当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《MySQL专栏:将现有的电话号码更改为特定格式?》经验,为你挑选了1个好方法。

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

2125551212

212-555-1212

(212)5551212

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

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



1> Kamil Goscim..:

不幸的是,标准安装没有REGEXP_MATCHES()TRANSLATE()功能MySQL(他们这样做Postgres),所以你可以这样做,我觉得很脏,但它的工作原理.

    首先,通过删除不使用数字的字符来清理列 replace()

    然后你将字符串的几个部分用来将它们分开 substr()

    最后,您将它们连接在子字符串之间添加符号 concat()

如果您还有其他需要截断的字符,只需添加另一个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声明作为读者的家庭作业.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有