정해진 자리수만큼 반복 자르기 질문입니다. 1 6 1,039

by 한결 [SQL Query] [2015.10.27 16:26:33]


select '123456789012' as val, 3 as repeat from dual

값이 이렇게 있을경우 

repeat 수만큼 반복으로 잘라서 중간에 특정 문자를 넣고 싶습니다.

repeat는 1~10까지 정해진건 아닙니다.

 

원하는값이 특수문자를 @를 넣는경우

val

123@456@789@012

이렇게 만들고자 하는데 어떤 함수를 써야 한가요

 

 

by 창조의날개 [2015.10.27 17:52:11]

SELECT REGEXP_REPLACE(SUBSTR(VAL,1,LENGTH(VAL)-1), '(.{'||REPEAT||'})', '\1@')||SUBSTR(VAL,-1) VAL
FROM (select '123456789012' as val, 3 as repeat from dual UNION ALL
      select '1234567890123456789' as val, 5 as repeat from dual)
;

by 마농 [2015.10.27 19:05:35]
SELECT val, repeat
     , SUBSTR(REGEXP_REPLACE(val, '('||LPAD('.', repeat, '.')||')', '@\1'), 2) x
  FROM (select '123456789012' as val, 3 as repeat from dual)
;

 


by 창조의날개 [2015.10.28 14:03:28]

 

저도 처음엔 마농님과 비슷하게 해봤는데..

그렇게 햇더니 repeat 값을 5로 바꾸면 결과가 잘못 나옵니다.

 


by 마농 [2015.10.28 15:50:05]

아하! @ 를 앞에 붙이면 안되네요. 뒤에 붙여야 하네요.

SELECT val, repeat
     , RTRIM(REGEXP_REPLACE(val, '('||LPAD('.', repeat, '.')||')', '\1@'), '@') x
  FROM (select '123456789012' as val, 5 as repeat from dual)
;

 


by 창조의날개 [2015.10.28 15:58:36]

저도 RTRIM을 쓸껄..

뭔가 있었는데.. 생각이 안나서.. 엄한짓을 했네요.. 


by 한결 [2015.10.28 09:44:10]

답변 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입