이전 밑에글에 [마스킹처리(치환)1] 와 비슷한 내용인데요..
원 데이타가 1바이트일때는 잘되는데, 한글(2바이트)일때는 의도대로 잘안되네요.
원데이타가 '홍길동AB'
일때 아래 룰에 의해 치환을 하게되면 '홍**동*B'
로 출력이 되야합니다. 그럼 아래 쿼리를 어떻게 수정해야 되는지요?
with T as ( select '홍길동AB' as names from dual ), R as ( select '01**23*5' keys from dual ) select listagg(result_names, '' ) within group ( order by rownum) as result from ( select case when substr(keys, level ,1) = '*' then '*' else substr(T.names, level ,1) end as result_names from R, T connect by level <= length(names) ) / |
SELECT x, y , LISTAGG(CASE WHEN b LIKE '%*%' THEN c ELSE a END) WITHIN GROUP(ORDER BY lv) FROM (SELECT LEVEL lv , x, y , SUBSTR(x, LEVEL, 1) a , SUBSTR( y , NVL(LENGTHB(SUBSTR(x, 1, LEVEL-1)), 0)+1 , LENGTHB(SUBSTR(x, LEVEL, 1)) ) b , LPAD('*', LENGTHB(SUBSTR(x, LEVEL, 1)), '*') c FROM (SELECT '홍길동AB' x, '1**4**7*' y FROM dual) CONNECT BY LEVEL <= LENGTH(x) ) GROUP BY x, y ;