Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在字符串之间格式化和插入字符-Postgresql_Sql_Postgresql_Postgresql 9.1_Postgresql 9.2 - Fatal编程技术网

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

如何在字符串之间格式化和插入字符-Postgresql,sql,postgresql,postgresql-9.1,postgresql-9.2,Sql,Postgresql,Postgresql 9.1,Postgresql 9.2,我有这张桌子 会员号|电话号码| ------+------- 1 | 09151234567 2 | 09904897851 3 | 09196332111 4 | 09957935412 5 | 09251279633 6 | 09357489412 7 | 09155974684 7排 我将电话号码列的格式设置为63xxxxxxxxx。使用此代码 更新成员集电话号码=regexp\u replacephone\u号码,“0.”,“63” 会员号|电话号码| ------+--------

我有这张桌子

会员号|电话号码| ------+------- 1 | 09151234567 2 | 09904897851 3 | 09196332111 4 | 09957935412 5 | 09251279633 6 | 09357489412 7 | 09155974684 7排

我将电话号码列的格式设置为63xxxxxxxxx。使用此代码 更新成员集电话号码=regexp\u replacephone\u号码,“0.”,“63”

会员号|电话号码| ------+-------- 1 | 63151234567 2 | 63904897851 3 | 63196332111 4 | 63957935412 5 | 63251279633 6 | 63357489412 7 | 63155974684 7排 现在我需要再次将此列更新为63xxx-xxxxxx格式。 我不想替换字符,我需要在字符串之间插入一个字符。
我尝试使用子字符串regexp\u replace,但失败了。我做错了什么。我确实发现了一些与此相关的问题,但这些问题都是关于字符串替换的。

您可以通过几种方式来实现这一点,我喜欢这一个带有左右键的问题:


你可以通过几种方式来实现,我喜欢这一种左右对称的方式:

要将格式63XXXXXXXX转换为63XXXX-xxxxxx,您可以尝试

UPDATE member SET phone_number = regexp_replace(phone_number, '(\(\d{2}\)\d{3})(\d{6})', '\1-\2');
您还可以使用以下命令直接从原始格式转换为63xxx-xxxxxx

UPDATE member SET phone_number = regexp_replace(phone_number, '(0\d)(\d{3})(\d{6})', '(63)\2-\3');
我在这个链接上创建了一个示例

以将格式63xxxxxxxx转换为63xxx-xxxxxx,您可以试试

UPDATE member SET phone_number = regexp_replace(phone_number, '(\(\d{2}\)\d{3})(\d{6})', '\1-\2');
您还可以使用以下命令直接从原始格式转换为63xxx-xxxxxx

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

我在这个链接上创建了一个示例,您也可以使用lookbehinds

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

当存在复杂的表达式而不是电话号码时,这尤其有用,因此在多次调用左、右或子字符串函数时,不希望重复使用它的可读性。

您也可以使用lookbehind

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

当存在复杂的表达式而不是电话号码时,这尤其有用,因此在多次调用左、右或子字符串函数时,不希望重复使用它的可读性。

如果格式正确,你为什么不直接用1的子串电话号码来表示7 | |'-'| | | | 8的子串电话号码?我不是那样用子串的。你的是对的。如果你有正确的格式,为什么不直接用1中的子串电话号码来表示7中的子串电话号码呢?8中的子串电话号码?我没有这样使用子串。你的是对的。