如何格式化并在与字符串之间PostgreSQL的插入字符

问题描述 投票:0回答:3

我有这个表。

member_id | phone_number -----------+-------------- 1 | 09151234567 2 | 09904897851 3 | 09196332111 4 | 09957935412 5 | 09251279633 6 | 09357489412 7 | 09155974684 (7 rows)

我格式化PHONE_NUMBER列格式(63)XXXXXXXXX。使用此代码 update member set phone_number = regexp_replace(phone_number, '0(.)', '(63)');

member_id | phone_number
-----------+--------------- 1 | (63)151234567 2 | (63)904897851 3 | (63)196332111 4 | (63)957935412 5 | (63)251279633 6 | (63)357489412 7 | (63)155974684 (7 rows)
现在我需要再次更新此列,这种格式(63)XXX-XXXXXX。我不希望更换一个角色,我需要在字符串之间插入一个字符。我已经使用串,REGEXP_REPLACE尝试,但失败了。我做错了。我没有找到某种方式与此相关的问题,但他们都对字符串替换。

sql postgresql postgresql-9.1 postgresql-9.2
3个回答
3
投票

你可以做,在一些方面,我喜欢这一个与right()left()

update member 
set phone_number = format('%s-%s', left(phone_number, 7), right(phone_number, -7));

0
投票

从格式转换(63)XXXXXXXXX至(63)XXXXXXXXX,你可以尝试

UPDATE member SET phone_number = regexp_replace(phone_number, '(\(\d{2}\)\d{3})(\d{6})', '\1-\2');

你也可以直接从原始格式通过使用转换为(63)XXX-XXXXXX以下

UPDATE member SET phone_number = regexp_replace(phone_number, '(0\d)(\d{3})(\d{6})', '(63)\2-\3');

我已经创建这个链接http://rextester.com/VCX4636样本


0
投票

您还可以利用lookbehinds。

select regexp_replace('(63)xxxxxxxxx','(?<=.{7})','-')

这是特别有用的,当有复杂的表达,而不是phone_number,因此它是不希望的可读性,以left()right()substring()函数的多次调用反复使用它。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.