MySQL 列:将现有的 phone 数字更改为特定格式?
MySQL column: Change existing phone numbers into specific format?
我有一个包含 phone 个数字的 MySQL 列,问题是它们的格式不同,例如:
- 2125551212
- 212-555-1212
- (212)5551212
我想知道是否可以采用现有的 10 位数字,删除格式,并将它们全部更改为这种格式:(212) 555-1212
不是重复项,因为我希望更新数千个条目而不是屏蔽新条目。
不幸的是,标准 MySQL
installation (they do with Postgres
) 没有 REGEXP_MATCHES()
或 TRANSLATE()
函数,所以你可以用我觉得很脏的方式来做,但它确实有效。
- 首先,您使用
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
声明作为 reader 的家庭作业。
我有一个包含 phone 个数字的 MySQL 列,问题是它们的格式不同,例如:
- 2125551212
- 212-555-1212
- (212)5551212
我想知道是否可以采用现有的 10 位数字,删除格式,并将它们全部更改为这种格式:(212) 555-1212
不是重复项,因为我希望更新数千个条目而不是屏蔽新条目。
不幸的是,标准 MySQL
installation (they do with Postgres
) 没有 REGEXP_MATCHES()
或 TRANSLATE()
函数,所以你可以用我觉得很脏的方式来做,但它确实有效。
- 首先,您使用
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
声明作为 reader 的家庭作业。