'#' 과 '#' 사이의 값중 ':'값으로만 되어있으면 ':'문자 전체를없애는 문제인데요.
1. 위 예시를 보면 맨 앞에는 # 이 없는데
- 맨 앞 자료가 : 만으로 이루어 져 있는 경우는 해당되나요? 안되나요?
- 예) '::::#abc' ===> ?
2. 맨 앞에는 # 이 없고 맨 뒤에는 # 이 있는데?
- 이런 형태가 고정인가요?
- 아니면 앞,뒤 # 이 있을수도 있고 없을수도 있는가요?
- 예) 'ABADF#:::#SDF#:A:'
- 예) 'ABADF#:::#SDF#:A:#'
- 예) '#ABADF#:::#SDF#:A:'
- 예) '#ABADF#:::#SDF#:A:#'
3. 혹시 # 사이에 아무것도 없는 경우는 없나요?
- 예) 'ABADF#:::##:A:#'
4. 조건에 해당하는 패턴이 1번 나오는데?
- 여러번 나오거나 연속으로 나올 수도 있나요?
- 예) 'ABADF#:::#:::#:A:#' ===> ?
1. 네 모든 ':' 분자는 '#' 과 '#' 사이에만 존재합니다.
- 맨 앞에 : 이 오는 경우는 없다는 거죠?
- 맨 뒤에 : 이 오는 경우는 없나요?
- 예) 'ABADF#:::#SDF#:::#' ===> ?
2. 맨뒤에오는 '#'과 ':'는 문자 혹은 숫자가 나올때까지 뒤에서 부터 지울 예정입니다.
- 맨 앞에 # 이 오는 경우는 업는건가요?
- 맨 뒤에는 # 이 항상 있는건대 지우겟다는 건가요?
- 있을 수도 있고 없을 수도 있는데 있으면 지우겠다는 건가요?
- 그렇다면 맨 뒤에 : 이 오는게 가능하다면?
- 맨 뒤에 # 이 있을 때와 없을 때 결과가 달라져야 하나요?
- 예) 'ABADF#:::#SDF#:::#' ===> ?
- 예) 'ABADF#:::#SDF#:::' ===> ?
1. 맨앞에 오는 경우는 없습니다. 맨뒤에 오는 경우는 있지만 뒤에서 부터 읽어서 ':', '#' 문자가 아닌 값이 올때까지 잘라서 쓸 예정입니다.
예) 'ABADF#:::#SDF#:::#::' -> 'ABADF##SDF'
2. - 맨 앞에 # 이 오는 경우는 업는건가요? -> 네 없습니다.
- 맨 뒤에는 # 이 항상 있는건대 지우겟다는 건가요? -> 넵
- 있을 수도 있고 없을 수도 있는데 있으면 지우겠다는 건가요? -> 넵
- 그렇다면 맨 뒤에 : 이 오는게 가능하다면? -> 지울 예정입니다
- 맨 뒤에 # 이 있을 때와 없을 때 결과가 달라져야 하나요?
- 예) 'ABADF#:::#SDF#:::#' ===> 'ABADF#:::#SDF'
- 예) 'ABADF#:::#SDF#:::' ===> 'ABADF#:::#SDF'
3. 아래 처럼 쿼리를 작성하였는데 #:::##::# -> ## 문자 갯수가 줄어드네요 ^^;
with tab as
(select 'SSS#20#SF11E#1#8:EFSSSFSSF#:::##::#:::ABC' as col, 'SSS#20#SF11E#1#8:EFSSSFSSF####:::ABC' as col_TRANS from dual)
select COL AS COL,
col_TRANS,
regexp_replace(col, '[#]+[^[:alnum:]]+[#]', '##') MAKE_COL
from (select REGEXP_SUBSTR(COL, '.*[^#:]') col, col_TRANS from tab)
;