Oracle 에서 Decode함수를 이용해서 크고 작음을 표시하고 싶어졌다. 예를들어 입력값이 어떤 수 이상이면 1 아니면 0을 반환하는 식이다. 그런데 검색해보면 Decode는 Decode(input, >0, 1, 0) 이런식으로 크다는 구문을 사용할 수 없다. 이럴때 어떻게할까? 구글링해보니 답이 있었다. 아래 링크 참고.
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_question_id:4333097088785
답은 sign 함수를 같이 사용하는 것이다. sign함수는 아래 링크에 나온것처럼 입력이 NULL이면 NULL을 0이면 0을 음수면 -1을 양수이면 1을 반환한다.
http://docs.oracle.com/javadb/10.10.1.2/ref/rreffuncsign.html
최종적으로 Decode와 결합된 해결방법 다음과 같다.
select EMPNO, ENAME, SAL,
decode( sign( 2500 - SAL ), -1, 'ABOVE 2500','VERY LESS') from EMP;
아래처럼 CASE 문으로 쓸수도 있지만 지저분하다.
select empno, ename, SAL,
CASE when SAL > 4000 THEN 'ABOVE 4000'
when SAL > 2500 THEN 'ABOVE 2500'
ELSE 'VERY LESS' END
FROM EMP;