Oracle的decode()函式
阿新 • • 發佈:2018-11-21
最近在做系統遷移,其中有一項是將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。