如何在字符串之间格式化和插入字符- Postgresql
How to format and insert a character in between a string- Postgresql
我有这个table。
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<br>
----------+----------------
1 | (63)151234567
2 | (63)904897851
3 | (63)196332111
4 | (63)957935412
5 | (63)251279633
6 | (63)357489412
7 | (63)155974684
(7 行)
现在我需要再次将此列更新为这种格式 (63)xxx-xxxxxx。
我不想替换一个字符,我需要在字符串之间插入一个字符。
我试过使用子字符串 regexp_replace 但失败了。我做错了什么。我确实找到了与此相关的问题,但它们都是关于字符串替换的。
你可以通过几种方式做到这一点,我喜欢这个 right()
和 left()
:
update member
set phone_number = format('%s-%s', left(phone_number, 7), right(phone_number, -7));
要将格式 (63)xxxxxxxxx 转换为 (63)xxx-xxxxxx,您可以尝试
UPDATE member SET phone_number = regexp_replace(phone_number, '(\(\d{2}\)\d{3})(\d{6})', '-');
您也可以使用以下
直接从原始格式转换为 (63)xxx-xxxxxx
UPDATE member SET phone_number = regexp_replace(phone_number, '(0\d)(\d{3})(\d{6})', '(63)-');
我已经在此创建了一个示例 link http://rextester.com/VCX4636
您还可以利用后视。
select regexp_replace('(63)xxxxxxxxx','(?<=.{7})','-')
这在有复杂表达式而不是 phone_number
时特别有用,因此在 left()
、right()
或 [ 的多次调用中重复使用它不利于可读性=14=]函数。
我有这个table。
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<br>
----------+----------------
1 | (63)151234567
2 | (63)904897851
3 | (63)196332111
4 | (63)957935412
5 | (63)251279633
6 | (63)357489412
7 | (63)155974684
(7 行)
现在我需要再次将此列更新为这种格式 (63)xxx-xxxxxx。
我不想替换一个字符,我需要在字符串之间插入一个字符。
我试过使用子字符串 regexp_replace 但失败了。我做错了什么。我确实找到了与此相关的问题,但它们都是关于字符串替换的。
你可以通过几种方式做到这一点,我喜欢这个 right()
和 left()
:
update member
set phone_number = format('%s-%s', left(phone_number, 7), right(phone_number, -7));
要将格式 (63)xxxxxxxxx 转换为 (63)xxx-xxxxxx,您可以尝试
UPDATE member SET phone_number = regexp_replace(phone_number, '(\(\d{2}\)\d{3})(\d{6})', '-');
您也可以使用以下
直接从原始格式转换为 (63)xxx-xxxxxxUPDATE member SET phone_number = regexp_replace(phone_number, '(0\d)(\d{3})(\d{6})', '(63)-');
我已经在此创建了一个示例 link http://rextester.com/VCX4636
您还可以利用后视。
select regexp_replace('(63)xxxxxxxxx','(?<=.{7})','-')
这在有复杂表达式而不是 phone_number
时特别有用,因此在 left()
、right()
或 [ 的多次调用中重复使用它不利于可读性=14=]函数。