1. 程式人生 > >Oracle中的decode函式和sign函式

Oracle中的decode函式和sign函式

sign函式的語法取數字n的符號,大於0返回1,小於0返回-1,等於0返回0。

SELECT sign(100),sign(-100),sign(0) FROM dual;
SIGN(100),SIGN(-100),SIGN(0)
1  -1  0

DECODE()函式類似於if...else if...else語句
SELECT DECODE(1,1,'內容是1',2,'內容是2','其他') FROM DUAL;
DECODE(1,1,'內容是1',2,'內容是2','其他')
內容是1

假設我們想給智星職員加工資,其標準是:工資在8000元以下的加20%;工資在8000元或以上的加15%,通常的做法是,先選出記錄中的工資欄位值? 

select salary into var-salary from employee,然後對變數var-salary用if-then-else或choose case之類的流控制語句進行判斷。如果用DECODE函式,那麼我們就可以把這些流控制語句省略,通過SQL語句就可以直接完成。如下:

select decode(sign(salary - 8000),>=0,salary*1.15,<0,salary*1.2,salary) from employee 

是不是很簡潔?