如何在字符串之间格式化和插入字符Postgresql

问题描述:

我有这张表。如何在字符串之间格式化和插入字符Postgresql

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但失败。我做错了什么。我确实发现了与此有关的问题,但他们都是关于字符串替换的。

+1

创建示例如果你有正确的格式,你为什么不只是使用'子(PHONE_NUMBER从1 7)|| ' - '||子串(phone_number从8)'? –

+0

我没有使用那样的子串。你是对的。 – kimdasuncion12

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

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

这是很好的知道。谢谢。 – kimdasuncion12

从格式(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