decode—對case的簡化
現假設我們有一個用戶表t_user,其中擁有一個表示性別的字段gender,該字段對應的值可能爲0、1或者空,其中0表示“男”,1表示“女”,空表示“未填”。現需要我們在查詢t_user的gender時不是顯示對應的0和1,而是顯示對應的文本,“男”或“女”。很顯然,我們可以使用case when else來實現,對應的SQL語句如下所示:
select case t.gender when 0 then '男' when 1 then '女' else '未填' end as gender from t_user;
如果我們是使用的Oracle數據庫,那麼我們就沒必要寫複雜的case when語句了,Oracle的decode函數可以幫我們實現同樣的功能。decode的語法如下:
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時,上面的邏輯可以簡單的轉化爲如下這樣:
select decode(t.gender,0,'男',1,'女','未填') as gender from t_user;
很明顯,下面的寫法比上面的寫法要簡單很多。