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;


+ Recent posts