我有一个包含电话号码的MySQL列,问题是它们的格式不同,例如:
我想知道是否可以取现有的10位数,删除格式,并将其全部更改为以下格式:(212)555-1212
不重复,因为我希望更新数千个条目而不是屏蔽新条目。
答案 0 :(得分:8)
不幸的是,REGEXP_MATCHES()
或TRANSLATE()
函数没有附带标准MySQL
安装(他们使用Postgres
),所以你可以这样做,我觉得很脏,但它的工作原理。
replace()
substr()
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
声明作为读者的家庭作业。