mysql语法与decode语法的不同
這兩天要把一個系統(tǒng)從oracle上移植到mysql上,順便簡單整理一下兩者語法的不同
?
decode
mysql中沒有decode,可以使用case when語句代替,oracle也支持case when語句,看來以后為了移植方便還是使用case when比較好。
select NAME,case namewhen 'sam' then 'yong'when 'lee' then 'handsome'else 'good' end from lee;?
下面是同一條sql,decode與case when比較:
?
?
sum(decode(sign(similarity-${param1})+sign(similarity-${param2}),0,1,-1,1,0)) as sus_tort_countsum(case sign(similarity-${param1})+sign(similarity-${param2}) when 0 then 1 when -1 then 1 else 0 End?
2.分頁代碼:
oracle中分頁代碼使用rownum,具體參見:http://qingfeng825.iteye.com/blog/779462
----oracle排序?qū)懛? SELECT * FROM ( SELECT list.*, rownum as RNUM FROM ( SELECT * FROM CIP_Test_User ORDER BY ID desc ) list WHERE ROWNUM < 11 ) WHERE RNUM >=1?
1和11都代表行號
mysql分頁使用limit
----mysql排序?qū)懛? SELECT * FROM CIP_Test_User ORDER BY ID desc limit 1,10?
1代表偏移量,10代表要取出來的記錄個數(shù)
3.數(shù)字轉(zhuǎn)字符串
???? mysql:? concat(site_id,'')
???? oracle:to_char(site_id)
?
4.取當(dāng)前日期(mysql 要加括號)
??? mysql:now(),sysdate() 具體參見:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html
??? oracle:sysdate
5.觸發(fā)器的不同,下面是兩個相同功能的觸發(fā)器
CREATE TRIGGER `IMS_EVIDENCE_UPDATE_TRIGGER` BEFORE UPDATE ON `bas_page_evidence`FOR EACH ROW BEGIN if ((NEW.WEB_IMAGE IS NOT NULL AND OLD.WEB_IMAGE IS NULL) OR(NEW.WEB_URL_IMAGE IS NOT NULL AND OLD.WEB_URL_IMAGE IS NULL) OR(NEW.HTML_SNAP IS NOT NULL AND OLD.HTML_SNAP IS NULL)) thenset new.Evidence_Done_Count=new.Evidence_Done_Count+1;if(new.EVIDENCE_DONE_COUNT>=new.EVIDENCE_COUNT) thenset new.Evidence_date=sysdate();if(new.EVIDENCE_STATUS!='4' and old.EVIDENCE_STATUS!='4') thenset new.Evidence_status = '3';end if;update bas_monitor_result set status='5' where status='4' and url_Id=new.url_id;end if; end if; END;?(mysql版本)
?
CREATE OR REPLACE TRIGGER IMS_EVIDENCE_UPDATE_TRIGGER before UPDATE OF Web_image,Web_url_image,Html_snap ON ims_page_evidence REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW WHEN ((new.Web_image is not null and old.Web_image is null) or(new.Web_url_image is not null and old.Web_url_image is null) or(new.Html_snap is not null and old.Html_snap is null)) BEGIN:new.Evidence_Done_Count := :old.Evidence_Done_Count+1;if :old.Evidence_Done_Count+1 >= :old.Evidence_Count then:new.Evidence_date := sysdate;if :old.Evidence_status !='4' and :new.Evidence_status !='4' then:new.Evidence_status := '3';end if;--更新resultupdate ims_monitor_result set status='5' where status='4' and url_Id=:new.url_id;end if; END;(oracle版本)?
?
?幾點不同: mysql沒有replace trigger, 要修改一個trigger只能是drop trigger后重新建;
???????????????? oracle在before update? 與 on? 表名之間可以加入 of 列名1,列名2,列表3,表示當(dāng)前trigger只對這幾列有用,在mysql中沒有找到這種寫法。
???????????????? oracle中用到new old都要加: ,mysql不用。
總結(jié)
以上是生活随笔為你收集整理的mysql语法与decode语法的不同的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDK5--Annotation学习:基
- 下一篇: SQL面试题二