1. 程式人生 > >Oracle中decode函式對case when的簡化

Oracle中decode函式對case when的簡化

現假設我們有一個使用者表t_user,其中擁有一個表示性別的欄位gender,該欄位對應的值可能為0、1或者空,其中0表示“男”,1表示“女”,空表示“未填”。現需要我們在查詢t_user的gender時不是顯示對應的0和1,而是顯示對應的文字,“男”或“女”。很顯然,我們可以使用case when else來實現,對應的SQL語句如下所示:
Sql程式碼:
select case t.gender when 0 then ‘男’ when 1 then ‘女’ else ‘未填’ end as gender from t_user t;

如果我們是使用的Oracle資料庫,那麼我們就沒必要寫複雜的case when語句了,Oracle的decode函式可以幫我們實現同樣的功能。decode的語法如下:
Sql程式碼 :


decode(value,if-1,then-1,if-2,then-2,..,if-n,then-n,defaultValue)

其表示如果value的值為“if-1”則返回“then-1”,如果值為“if-n”則返回“then-n”,如果value的值不在給定的if值裡面則將返回預設值defaultValue。所以使用decode時,上面的邏輯可以簡單的轉化為如下這樣:
Sql程式碼 :
select decode(t.gender,0,’男’,1,’女’,’未填’) as gender from t_user;
很明顯,下面的寫法比上面的寫法要簡單很多。