您的位置:首页 > 数据库 > Oracle

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

2017-08-31 20:51 501 查看
最近在帮公司的项目做去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
return1 WHEN value2 THEN return2
ELSE
default
END;或者 CASE WHEN value = value1 THEN return1 WHEN value = value1 THEN  return2 ELSE 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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle mysql