设为首页 收藏本站
查看: 522|回复: 0

[经验分享] mysql语法与decode语法的不同

[复制链接]

尚未签到

发表于 2016-9-29 09:14:45 | 显示全部楼层 |阅读模式
  这两天要把一个系统从oracle上移植到mysql上,顺便简单整理一下两者语法的不同
  



  • decode
  mysql中没有decode,可以使用case when语句代替,oracle也支持case when语句,看来以后为了移植方便还是使用case when比较好。

select NAME,
case name
when '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_count
sum(case sign(similarity-${param1})+sign(similarity-${param2}) when 0 then 1   when -1 then 1 else 0 End
  

2.分页代码:
  oracle中分页代码使用rownum,具体参见:http://qingfeng825.iyunv.com/blog/779462

----oracle排序写法   
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排序写法   
SELECT *   FROM CIP_Test_User                                                      
ORDER BY ID desc
limit 1,10  

  
  1代表偏移量,10代表要取出来的记录个数

3.数字转字符串
  mysql:  concat(site_id,'')
  oracle:to_char(site_id)
  

4.取当前日期(mysql 要加括号)
  mysql:now(),sysdate() 具体参见:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html
  oracle:sysdate

5.触发器的不同,下面是两个相同功能的触发器

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)) then
set new.Evidence_Done_Count=new.Evidence_Done_Count+1;
if(new.EVIDENCE_DONE_COUNT>=new.EVIDENCE_COUNT) then
set new.Evidence_date=sysdate();
if(new.EVIDENCE_STATUS!='4' and old.EVIDENCE_STATUS!='4') then
set 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;
--更新result
update 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,表示当前trigger只对这几列有用,在mysql中没有找到这种写法。
  oracle中用到new old都要加: ,mysql不用。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-278947-1-1.html 上篇帖子: jdbc 连接mysql数据库笔记 下篇帖子: MySql配置主从复制 读写分离
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表