1. 程式人生 > >Oracle的decode()函式

Oracle的decode()函式

最近在做系統遷移,其中有一項是將SQL語句轉換成程式碼實現。於是遇到的下面的SQL語句
decode(a.character_id, ‘308425’, nvl(a.character_value,a.old_character_value), ‘’ )

DECODE() 是流程控制函式
作用是將查詢結果翻譯成其他值


decode(欄位,比較1,值1,比較2,值2,… ,比較n,值n,預設值)
decode(條件,值1,翻譯值1,值2,翻譯值2,… ,值n,翻譯值n,預設值)

if (條件==值1)
then    
return(翻譯值1)

elsif (條件==值2)
then    
return(翻譯值2)    
……
elsif (條件==值n)
then    
return(翻譯值n)

else    
return(預設值)

end if

例題:decode(a.character_id, ‘308425’, nvl(a.character_value,a.old_character_value), ‘’ )
當a.character_id = 308425時,decode()函式返回值是 nvl(a.character_value,a.old_character_value);
否則其返回值為空

例題:select monthid,decode(sign(sale-6000),-1,sale,6000) from output;
獲取與6000相比的較小值


補充:
decode中可使用其他函式,如nvl()函式或sign()函式等:
NVL(a,b)


若a是NULL,則返回b,否則返回a。
SIGN(n)
取數字n的符號,大於0返回1,小於0返回-1,等於0返回0。