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

时间:2017-03-29 02:45:35

标签: sql postgresql postgresql-9.1 postgresql-9.2

我有这张桌子。

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 。 我不想替换一个字符,我需要在字符串之间插入一个字符。 我尝试过使用substring,regexp_replace但是失败了。我做错了什么。我确实发现了与此有关的问题,但它们都是关于字符串替换的。

3 个答案:

答案 0 :(得分:3)

你可以通过几种方式做到这一点,我喜欢这个right()left()

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

答案 1 :(得分:0)

要将格式(63)xxxxxxxxx 转换为(63)xxx-xxxxxx ,您可以尝试

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

创建了一个示例

答案 2 :(得分:0)

您还可以利用隐身。

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

这是特别有用的,当有复杂的表达,而不是phone_number,因此它是不希望的可读性,以在多次调用重复使用它left()right()或{{1 }}功能。