SQL replace()함수 가변적으로 문자변경

BEHE_LIT·2020년 1월 30일
0

SQL

목록 보기
1/1

문제

ename(컬럼) 중에 첫번째 철자와 마지막 철자를 제외하고 중간 철자는 로 표시하시오.

부딪힌상황 : ENAME에 해당되는 컬럼의 데이터값들이 보다시피 모두 문자수가 다르다.

스크린샷(9).png

  1. 변경대상의 데이터 문자개수를 가변적으로 지정
  2. 변경값인 '*' 역시 가변적으로 개수를 지정

replace(substr(ename,2,length(ename)-2,'*')

replace함수의 첫번째 수식인 변경대상문자는 substr함수와 length함수를 중첩해서 가변적인 범위지정으로 첫번째 조건을 어렵지 않게 해결해냈으나.. 문제는 2번째 수식에서는 직접적으로 바꿔줄 문자값을 대입해야하는데 이걸 어떤 함수를 써야할지 도저히 답이 안나왔다...

답안

select replace(ename, substr(ename, 2, length(ename)-2), substr('******',1,length(ename)-2))
from ename;
SELECT rpad(substr(ename,1,1),length(ename)-1,'*') || substr(ename,-1,1) 
FROM emp;

억지로 구겨넣은 느낌이긴하지만 아무튼 해답은 이러했다..
개발자에게 논리가 중요하다는 이유가 이런거구나~ 하고 느끼게 되는 순간이다.

profile
방랑자의 현장에 오신걸 환영합니다.

1개의 댓글

comment-user-thumbnail
2020년 1월 30일

replace함수에서 두번째 수식은 컬럼의 데이터중 가장 길이가 긴 문자수만큼(넘어도 상관없다) *를 선언하고 첫번째자리부터 length size -2까지 범위를 지정해준다. 문자수가 넘어가도 상관이 없는 이유는 아무리 길게 선언되어있어도 length size -2만큼 무조건 조절을 해주기 때문이다. 대신 사이즈를 적게 선언하면 그만큼 작아지니 주의할것.

답글 달기