나 취준생/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;
반응형