MySQL与Oracle语法上一些常见的差异

最近在帮公司的项目做去O,借此机会记录一些MySQL与Oracle语法上常见的差异,以便加深印象以及日后查阅。

例子:性别为男则为1,否则为0。 MySQL:IF(expr ,value1,value2如果 expr 为TRUE,则 IF()的返回值为value1; 否则返回值则为 value2。就相当于三目运算符。  Oracle:decode(value,value1,return1,value2,return2,...valuen,returnn,default)。如果value的值等于value1则返回return1,等于value2则返回return2,以此类推,都不匹配的情况下返回默认值default。如果匹配数多的话MySQL没有decode但可以用case when来代替,case when的语法为CASE value WHEN value1 THEN returnWHEN value2 THEN return2 ELSE default END;或者 CASE WHEN value = value1 THEN returnWHEN value = value1 THEN  returnELSE default END;case when比起decode还能做表达式的多种判断更加灵活,综合起来代码如下:

SELECT IF(gender='男',1,0) gender FROM TABLE;
SELECT decode(gender,'男',1,0) gender FROM TABLE;
#多条件
SELECT CASE gender WHEN '男' THEN 1 WHEN '女'THEN 0 ELSE 666 END gender FROM TABLE;
SELECT decode(gender,'男',1,'女',0,666) gender FROM TABLE;


例子:查找金额,为空则为零。MySQL:IFNULL(value,0)。Oracle:NVL (value,0)。value为null则返回0,否则返回value,此处的0也可以用其他值代替。

SELECT IFNULL(MONEY,0) MONEY FROM TABLE;
SELECT NVL(MONEY,0) MONEY FROM TABLE;

字符串拼接:concat()函数。MySQL的concat函数可以连接一个或者多个字符串,而Oracle的concat函数只能连接两个字符串。concat('1','2','3')。但Oracle可以直接用||来拼接,就相当于+一般。MySQL的concat函数参数只要其中一个是NULL,那么将返回NULL而Oracle的concat函数,只要有一个字符串不是NULL,就不会返回NULL。顺便还有concat_ws()函数语法差不多,多了第一个参数为分隔符,concat_ws(',','1','2') 返回 1,2。

SELECT CONCAT('1','2','3');
SELECT CONCAT('1','2') FROM DUAL;
SELECT '1' || '2' || '3' FROM DUAL;

例子:查出以班级为单位的学生姓名,以,隔开来行转列。MySQL: group_concat(),Oracle:wm_concat()。两者的用法一样。

SELECT id,group_concat(name) FROM TABLE GROUP BY id;
SELECT id,wm_concat(name) FROM TABLE GROUP BY id;

分页:MySQL:limit,Oracle:rownum。这两个算是比较常出场的了,但是limit是从0开始计数,而rownum是从1开始计数,limit参数可以为一个,此时limit n就相当于 limit 0,n。limit 5 取前五跳数据。具体语法如下。记录第六条开始五条数据。

SELECT * FROM TABLE LIMIT 5,5;
SELECT * FROM (SELECT t.*, rownum rn FROM TABLE WHERE rownum <=10) tt WHERE tt.rn > 5;



当前时间  MySQL:now(),Oracle:sysdate,这个也跟上面一个一样较常出场。

select to_char(sysdate,'yyyy-mm-dd') from dual; 
select date_format(now(),'%Y-%m-%d'); 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值