我有一个包含电话号码的MySQL列,问题是它们的格式不同,例如:
2125551212
212-555-1212
(212)5551212
我想知道是否可以采用现有的10位数字,删除格式,并将它们全部更改为以下格式:(212)555-1212
不重复,因为我希望更新几千个条目而不是屏蔽新条目.
不幸的是,标准安装没有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
声明作为读者的家庭作业.