나 취준생/SQL

SQL - 암시적 형변환을 항상 조심

록리9 2020. 11. 17. 13:58
320x100


실제로 한 현업에서 있던 사고 :




예제 : 직업이 PRESIDENT인 사원빼고 모든 사원들의 월급을 출력하기


select (decode(job,'PRESIDENT',null,sal))

 from emp;



예제 : 위의 결과에서 최고 월급만 출력하기


select MAX(decode(job,'PRESIDENT',null,sal))

 from emp;



** 3000이 아닌 950이 나온 이유


decode(job,'PRESIDENT,null,sal) 을 사용했을 때

세 번째 값 null이기 때문에, 네 번째 인자값인 sal이 문자형으로 암시적 형변환이 발생해버렸기 때문


위와 같이 sal을 문자형 기준으로 정렬하면, 맨 앞의 숫자인 9가 제일 큰 값으로 인식된다.


그래서 사고가 났다고 한다 ㅎ



그렇다면 어떻게 짰어야 했을까?


올바른 코드 : null 값이 아닌 0으로 바꾸자!


select max(decode(job,'PRESIDENT',0,sal))

 from emp;




반응형