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() 버튼을 클릭하여 작성 하시면 됩니다.