마스킹처리(치환)2 0 7 3,192

by 제임스 [SQL Query] [2014.07.25 15:17:54]


이전 밑에글에  [마스킹처리(치환)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)
)
/
by 마농 [2014.07.25 15:22:02]

기준을 글자단위가 아닌 바이트 단위로 간다면?

마스킹 처리 단위가 어긋나서 한글이 반으로 잘려야 할 경우도 발생될텐데요?


by 제임스 [2014.07.25 15:29:23]

네... 그래서 질문을 드린겁니다. ^^

위 조건을 만족하면서 한글이 안짤리게 방지하는 쿼리보정같은걸로 안되나요??

그래도 이게 안된다면 쿼리구조를 다르게 해야되나요?

가령  REGEXP_REPLACE 함수를 써야한다든지요..


by 마농 [2014.07.25 15:33:42]

쿼리 보정이 아니라 규칙(룰) 보정이죠.

룰을 어떻게 가져갈 것인지를 보정하셔야죠.

쿼리는 보정하는게 아니라 정해진 룰에 맞게 작성하는 것 뿐이죠.


by 마농 [2014.07.25 15:41:51]

예를 들면 '홍길동', '1**4**' 의 경우 룰을 어떻게 가져갈 것인가?
1. 홍길** : * 이 하나만 걸치는 경우는 무시하고 ** 의 경우만 ** 로 치환
2. ****** : * 이 하나라도 걸치면 치환
3. 홍**** : * 이 한글 뒤에 걸치면 무시하고 앞에 걸치면 ** 로 치환
4. **길** : * 이 한글 앞에 걸치면 무시하고 뒤에 걸치면 ** 로 치환
5. _**_** : * 이 하나만 걸치는 경우 걸치는 부분은 * 로 나머지 부분은 다른 문자로(공백 등)


by 제임스 [2014.07.25 16:10:20]

역시 쿼리의 지존 !! 마농님. .예리하십니다.

2번이 한글규칙의 정확한 룰입니다. 2번대로의 쿼리 부탁드려요 ^^


by 마농 [2014.07.25 17:32:37]
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
;

 


by 제임스 [2014.07.27 00:17:14]

테스트 해봤는데, 잘되네요.. 감사합니다. 쿼리의 신 ~~ ^^

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