앞, 뒤 문자를 체크해서 해당문자가 없으면 붙여주기.. 2 4 1,446

by 동동동 [SQL Query] [2019.01.18 13:13:47]


안녕하세요..

,1,2,3

4,5,6,

,7,8,9,

다음과 같이 값이 있을때 앞뒤로 콤마(,) 가 있는지 체크해서 없으면 붙여주게 할 수 있을까요?

결과)

,1,2,3,

,4,5,6,

,7,8,9,

 

by 마농 [2019.01.18 14:03:18]
WITH t AS
(
SELECT '0,1,2' v FROM dual
UNION ALL SELECT ',1,2,3'  FROM dual
UNION ALL SELECT '4,5,6,'  FROM dual
UNION ALL SELECT ',7,8,9,' FROM dual
)
SELECT v
     , ',' || TRIM(BOTH ',' FROM v) || ','    v1  -- 1. 앞뒤 컴마 제거 후 일괄 붙이기
     , REPLACE(',' || v || ',', ',,', ',')    v2  -- 2. 일단 컴마 붙이고 컴마 두개를 Replace
     , DECODE(SUBSTR(v,  1, 1), ',', '', ',')
       || v ||
       DECODE(SUBSTR(v, -1, 1), ',', '', ',') v3  -- 3. 컴마 있는지 확인하여 붙이기
  FROM t
;

 


by 동동동 [2019.01.18 15:57:07]

마농님 답변 감사드립니다..

하다보니 추가 질문을 하게되네요..

REPLACE(',' || v || ',', ',,', ',')    v2  -- 2. 일단 컴마 붙이고..에서

값이 ,,7,8,9, 잘못되서 콤마가 하나더 있을시 에는 어떻게 하지라는 생각을 하게 되네요...^^

뭔가 반복해서 Replace를 해줄수 있는 방법이 있을까요??

 


by 마농 [2019.01.18 16:57:36]
WITH t AS
(
SELECT ',,,7,8,,,,9' v FROM dual
)
-- 여러개 컴마를 한개 컴마로 바꾸는 방법
SELECT v
     , REGEXP_REPLACE(v, ',+', ',')                       v1  -- 정규식 이용
     , REPLACE(REPLACE(REPLACE(v, ',', '-,'), ',-'), '-') v2  -- 3단계 Replace
  FROM t
;

 


by 동동동 [2019.01.18 17:51:08]

감사합니다...^^

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