- 必須依附在 SELECT,UPDATE,INSERT,DELETE 下
- 不可用在區段中加其他動作
- 具有 switch 與 if else 兩種架構
-- switch 的用法 SELECT CASE col WHEN 100 THEN '1' WHEN 50 THEN '2' ELSE '3' END FROM table; -- if else 的用法 SELECT CASE WHEN col>100 THEN '1' WHEN col>50 THEN '2' ELSE '3' END FROM table;
在需要對欄位做多種情況區分時,這個指令就很好用,可惜不行加入其他動作,例如:
CASE WHEN EXISTS(SELECT * FROM table WHERE id=1) THEN (UPDATE table SET txt='test' WHERE id=1) ELSE (INSERT INTO table(id,txt) VALUES(1,'text')) END;
參考文件:
MySQL 5.1 Reference Manual :: 21.2.10.2 CASE Statement
mysql语句中用if的例子
4 回應:
你好!
請問一下,我現在需要新增欄位,但我希望能先判斷,避免錯誤產生後中斷script執行。
看了你的文章後,我依樣畫葫蘆
CASE WHEN
EXISTS (select ord_code from i25data)
THEN (select * from i25data)
ELSE (ALTER TABLE `i25data` ADD COLUMN `ORD_CODE` VARCHAR(16) AFTER `DAYPRT1`)
END;
不曉得這樣是否可以直接執行?
還是需要另外加甚麼script才可以?
謝謝你的幫助!
很抱歉給你錯誤的資訊
在文章中我有提到這個作法在 MySQL 中是不可行的
MySQL 中是沒有 script 的流程控制
如果你一定要使用 script
MySQL 只有預存函數有支援完整 script 流程
這個部分我做過很多次的實驗了
在一般 query 中是沒辦法達成的
除非你使用更完整 SQL Database (MSSQL,Oracle)
非常感謝你的回覆!
我了解你文章的意思了!
是我誤會。
再次感謝!
請問使用Case when 或 IF,可以輸出原本欄位的值嗎 ? 如: IF (FinishTime<'2010-11-12',FinishTime,'2010-11-12') 也就是如果FinishTime小於2010-11-12,我就取FinishTime欄位值,否則輸出2010-11-12的日期,試的結果好像都無法成功 ?
張貼留言