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)

I이 형식 (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를 사용해 보았지만 실패했습니다. 나는 뭔가 잘못하고있다. 나는 이것과 어떻게 든 관련이있는 질문을 찾았지만 모두 문자열 교체에 관한 것입니다.

+1

에서 샘플을 작성했습니다 || '-'|| 부분 문자열 (phone_number from 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)로 변환하려면, (63)를 XXXXXXXXX 당신을을 XXXXXXXXX 사용하여 당신은 또한 (63) XXX-XXXXXX에 원래의 형식에서 직접 변환 할 수

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 일에서 PHONE_NUMBER)`문자열을 사용하지 않는 것이있는 경우이 링크 http://rextester.com/VCX4636