2017-03-29 5 views
0

私はこのテーブルを持っています。文字列の間に文字を書式設定して挿入する方法 - Postgresql

member_id | phone_number -----------+-------------- 1 | 09151234567 2 | 09904897851 3 | 09196332111 4 | 09957935412 5 | 09251279633 6 | 09357489412 7 | 09155974684 (7 rows)

私はこのフォーマット(63)にPHONE_NUMBER列をフォーマットを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を使用しようとしましたが失敗しました。私は何か間違っている。私は何とかこれに関連する質問を見つけましたが、それらはすべて文字列の置換に関するものです。あなたは、いくつかの方法で、私はright()left()と、このいずれかを好きなことを行うことができます

+1

でサンプルを作成しました|| ' - ' ||部分文字列(phone_number from 8) '? –

+0

私はそのような部分文字列を使用しませんでした。あなたは正しいです。 – kimdasuncion12

答えて

3

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

これは知っておくと良いことです。ありがとうございました。 – kimdasuncion12

0

形式(63)から変換するにはをXXXXXXXXX(63)あなたは、をXXXXXXXXXまた、次を使用してXXX-XXXXXX(63)に、元の形式から直接変換することができ

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

を試みることができます

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

あなたは正しい形式は、なぜあなたは単に `ストリング(7ための1からPHONE_NUMBER)を使用しないことを持っている場合、私は、このリンクhttp://rextester.com/VCX4636

関連する問題