根據表中同一字段不一樣狀況下的值修改成對應的內容,如何實現?html
使用case when then else end語句。java
沒有else語句,將會致使全表更新sql
證明:oracle
結果展現:spa
說明:更新的是全表記錄,而不是更新的只是符合上面三種狀況的記錄;htm
不在狀況範圍內的,執行的是將該字段值置空,sql語句至關於:blog
UPDATE BASE_AC_MODULE_BAK T SET T.MODULEICON = CASE WHEN T.MODULEICON = '/commons/images/img/add.gif' THEN '/commons/images/img/add.png' WHEN T.MODULEICON = '/commons/images/img/edit.gif' THEN '/commons/images/img/update.png' WHEN T.MODULEICON = '/commons/images/img/delete.gif' THEN '/commons/images/img/delete.png' ELSE NULL END
用法一:簡單case語句get
CASE SEX WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其餘' END
用法二:case搜索語句it
CASE WHEN SEX = '1' THEN '男' WHEN SEX = '2' THEN '女' ELSE '其餘' END
用法說明:io
與java的switch語句不一樣是,若是不聲明ELSE語句,oracle會自動添加ELSE語句(ELSE NULL),當數據出現與case的狀況都不匹配時,
顯示的不是原數據,而是空值;
必須有END關鍵詞聲明結束CASE語句;
另外,需特別注意的是:使用CASE語句,不管是查詢仍是修改語句,在不加限制條件的狀況下,默認是對全表進行操做!
方法一
UPDATE BASE_AC_MODULE_bak T SET T.MODULEICON = CASE WHEN T.MODULEICON = '/commons/images/img/add.gif' THEN '/commons/images/img/add.png' WHEN T.MODULEICON = '/commons/images/img/edit.gif' THEN '/commons/images/img/update.png' WHEN T.MODULEICON = '/commons/images/img/delete.gif' THEN '/commons/images/img/delete.png' ELSE T.MODULEICON END WHERE (T.MODULEICON = '/commons/images/img/add.gif' OR T.MODULEICON = '/commons/images/img/delete.gif' OR T.MODULEICON = '/commons/images/img/edit.gif')
else爲何能夠省略?
更新加上限制條件後,只有16條數據符合要求並進行修改,不存在else的狀況。
方法二:限制條件加在where後,多個條件之間使用or
UPDATE BASE_AC_MODULE_BAK T SET T.MODULEICON = DECODE(T.MODULEICON, '/commons/images/img/add.gif', '/commons/images/img/add.png', '/commons/images/img/edit.gif', '/commons/images/img/update.png', '/commons/images/img/delete.gif', '/commons/images/img/delete.png') WHERE (T.MODULEICON = '/commons/images/img/add.gif' OR T.MODULEICON = '/commons/images/img/delete.gif' OR T.MODULEICON = '/commons/images/img/edit.gif')