ename(컬럼) 중에 첫번째 철자와 마지막 철자를 제외하고 중간 철자는 로 표시하시오.
부딪힌상황 : ENAME에 해당되는 컬럼의 데이터값들이 보다시피 모두 문자수가 다르다.
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;
억지로 구겨넣은 느낌이긴하지만 아무튼 해답은 이러했다..
개발자에게 논리가 중요하다는 이유가 이런거구나~ 하고 느끼게 되는 순간이다.
replace함수에서 두번째 수식은 컬럼의 데이터중 가장 길이가 긴 문자수만큼(넘어도 상관없다) *를 선언하고 첫번째자리부터 length size -2까지 범위를 지정해준다. 문자수가 넘어가도 상관이 없는 이유는 아무리 길게 선언되어있어도 length size -2만큼 무조건 조절을 해주기 때문이다. 대신 사이즈를 적게 선언하면 그만큼 작아지니 주의할것.