지역번호의 노출을 피하기 위해(진짜는 아니지만) 지역번호를 '***'로 블러처리를 하기로 한다.
이 때, 참 곤란한 것이 있는데, 지역번호가 051, 041처럼 세 글자도 있지만, 02처럼 두 글자도 있다는 점이다.
물론.. 그걸 고려하지 않으면 참 쉬운 실습이다.
SELECT TEL,
REPLACE(
TEL,
SUBSTR(TEL,1,INSTR(TEL,')')-1),
'***'
) TEL
FROM STUDENT;
그러나, 이렇게 되면 보다시피 02 역시 세 글자 지역번호로 가려져버린다.
이것이 못내 아쉬우니, 바꿀 문자열이 동적으로 갯수가 변할 수 있도록 조취를 취하도록 한다.
별의 '갯수'를 조절할 수 있는 방향이 어느쪽일지 고민하다가 RPAD를 사용하기로 했다.
RPAD로 문자열 '*' 을 지정한다. 이 때, 문자열은 tel의 첫 시작점에 위치할 것이다. (substr함수로 맨 처음부터 바꿀거라고 지정해뒀으니까!)
그리고, 오른쪽으로 *의 갯수를 늘리는데, 이 때 별의 갯수는 tel이 가지고 있는 ' ) ' 문자열에서 하나 작은 값으로 지정했다. RPAD의 영향으로 이미 * 하나가 생긴 이후이기 때문이다.
그렇게 해서 코드는 다음과 같이 나왔다.
SELECT TEL,
REPLACE(
TEL,
SUBSTR(TEL,1,INSTR(TEL,')')-1),
RPAD(
'*',
INSTR(TEL,')')-1,
'*'
)
) TEL
FROM STUDENT;
결과는 의도한대로 지역번호가 두자리인 경우 별이 2개, 지역번호가 세자리인 경우 별이 3개로 출력되는 것을 확인할 수 있다.
나중에 답을 들으니 조금 더 쉬운 방법이 있었는데,
SELECT TEL,
REPLACE(
TEL,
SUBSTR(TEL,1,INSTR(TEL,')')-1),
SUBSTR('***',1,INSTR(TEL,')')-1)
) TEL
FROM STUDENT;
이 방법은 바뀔 문자열에 SUBSTR과 INSTR을 이용해서 동적으로 잘라내는 함수를 사용했었다.
이 쪽이 좀 더 간단해서 좋아보인다.
반응형
'데이터베이스' 카테고리의 다른 글
오라클 날짜 데이터 포맷 변경하기 (0) | 2020.03.25 |
---|---|
오라클 실습 2. length와 RPAD를 이용해 이름의 빈 칸 채우기. (0) | 2020.03.19 |
2. 문자함수(substr, instr, replace ....) (0) | 2020.03.19 |
1. SELECT 명령어 (0) | 2020.03.19 |
테이블 자료 수정 체험. (0) | 2020.03.18 |