总结MySQL和Oracle的语法区别

1、时间函数
mysql oracle
时间转换为字符串型时间 date_format(NOW(),‘%Y-%m-%d’) to_char(sysdate, ‘YYYY-MM-DD’)
字符串型时间转换为时间类型 date_format(NOW(),‘%Y-%m-%d’) to_date(‘2020-12-01’, ‘YYYY-MM-DD’)
2、空值返0
mysql oracle
IFNULL、COALESCE nvl、nvl2
说明:
nvl:基本语法为nvl(E1,E2),意思是E1为null就返回E2,不为null就返回E1。
nvl2:nvl2函数的是nvl函数的拓展,基本语法为nvl2(E1,E2,E3),意思是E1为null,就返回E3,不为null就返回E2。
IFNULL:基本语法为IFNULL(E1,E2),假如E1不为NULL,则返回值为E1,否则为E2。
COALESCE:COALESCE(value,…)是一个可变参函数,可以使用多个参数。作用:接受多个参数,返回第一个不为NULL的参数,如果所有参数都为NULL,此函数返回NULL;当它使用2个参数时,和IFNULL函数作用相同。
3、长度函数
mysql oracle
char_length(str) length(str)
4、条件函数
mysql oracle
IFNULL nvl
IF(expr1,expr2,expr3) nvl2
IF(value=val1, val2, val3)、case when DECODE
说明:
IF(expr1,expr2,expr3):如果expr1不为null,则返回expr2,否则返回expr3。
IF(value=val1, val2, val3):如果value等于val1,则返回val2,否则返回val3。
case when then else end:如果value等于if1,则返回val1,如果value等于if2,则返回value2…如果value等于ifn,则返回valn,否则返回val。
SELECT
  CASE WHEN STATUS = '1' THEN 'success'
       WHEN STATUS = '0' THEN 'faild'
ELSE 'error' END
FROM  SYS_SCHEDULER
5、trunc()函数
MySQL Oracle
truncate(123.123,2) TRUNC(123.123,2)
6、字符串整型转换函数
MySQL Oracle
整型转字符串 CAST(123 AS CHAR(3)) to_char(123)
字符串转整型 cast(‘123’ as SIGNED) to_number(‘123’)
7、引号
MySQL可识别双引号和单引号,Oracle只能识别单引号。
8、字符串连接符
MySQL Oracle
concat(studentname, ‘=’, studentno) studentname||‘=’||studentno
9、空数据排序
MySQL
select * from USER A order by IF(ISNULL(A.REMARK),1,0),A.REMARK desc
select * from USER A order by IF(ISNULL(A.REMARK),0,1),A.REMARK desc
Oracle
SELECT * FROM USER A ORDER BY A.REMARK DESC NULLS FIRST
SELECT * FROM USER A ORDER BY A.REMARK DESC NULLS LAST
10、表(左/右)关联
Oracle左连接、右连接可以使用(+)来实现,MySQL只能使用left join ,right join等关键字。
Oracle
select * from ta, tb where ta.id = tb.id(+);  #左关联
select * from ta, tb where ta.id(+) = tb.id;  #右关联
MySQL
select * from ta left join tb on ta.id=tb.id;  #左关联
select * from ta right join tb on ta.id=tb.id; #右关联
11、merge into
   MySQL不支持(merge into),但提供的replace into 和on duplicate key update可实现相似的功能。
insert into article(id,title,content)
select '10' id, '今日新闻' title, '北京新闻' content
from article
on duplicate key
update title = values(title),
content=values(content);
replace into article(id,title,content)
values('10', '今日新闻','北京新闻');
阅读剩余
THE END