資料庫的case when關鍵字,其實就是類似if,else if,else的這一種格式,是取得判斷條件的一種方式。
在預存程序中和平時寫的sql其語法格式是基本上一致的,case when的用法呼叫也是。
先行舉例:
select qzh from ywda_swjg_qzh_dz where swjg = ( select case when substr('11101823000'),0,7) = '1110182' then substr('11101960000',0,8) || '000' else substr('1110196000',0,7) || '0000' end swjgdm from ywda_swjg_qzh_dz where a.swjg_dm = b.swjg_dm);
case when 不僅可以在查詢的結果中使用,同樣可以在where條件之後做判斷條件使用。
這一條sql把兩種情況都囊括在其中了,當然我們也可以不用在後方的where條件中加入select,如:
select qzh from ywda_swjg_qzh_dz where swjg = case when substr('11101823000'),0,7) = '1110182' then substr('11101960000',0,8) || '000' else substr('1110196000',0,7) || '0000' end;
這種格式直接用case when 的方式效率肯定還是比較高的。
注意:case when必須配合then 以及end來進行使用。
當然,我的預存程序沒有這麼寫,今天老大發話,說不用太負責,直接if,else這種格式書寫就可以了。
預存程序的if,else和前後台用的if以及else格式還是有點不一樣的,公司沒外網,純手打,咱就不貼java程式碼了,直接上預存程序的部分內容。
if substr(AVC_QXSWJG,0,8) = '11100006' or substr(AVC_QXSWJG,0,7) = '1110182' then select qzh into avc_qch from ywda_swjg_qzh_dz where swjg_dm = substr(avc_qxswjg,0,8) || '000'; elsif 条件(不加括号) then ................................sql省略......................................... else .................................sql省略....................................... end if; sql结束。
注意,邏輯運算子在這裡採用sql的邏輯運算符,即and,or這一類。
上方寫的「||」是在欄位後方追加字串,不是邏輯或,要注意。
在if結束之後,一定要加end if來表示目前if結束。
推薦教學:mysql影片教學
#以上是case when用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!