2017-03-29 47 views
0

我有這張表。如何在字符串之間格式化和插入字符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

回答

3

你可以做,在一些方面,我喜歡這一個與right()left()

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

這是很好的知道。謝謝。 – kimdasuncion12

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

相關問題