一.常用字段类型区别
oracle | mysql |
number(10,0) | int |
number(10,2) | decimal(10,2) |
varchar2 | varchar |
date | datetime |
二.个别语句写法区别
1.oracle里只可以用单引号包起字符串,mysql里可以用双引号和单引号。
2.mysql 在select * from () ....,from后面是一个结果集时,括号后面必须加上别名。
3.mysql在delete数据时不能给表加别名,如:delete from table1 T where....,会报错,但是可以这样写:delete T from table1 T where....。
4.Mysql不支持在同一个表中先查这个表在更新这个表,举个例子说明一下,
insert into table1 values(字段1,(select 字段2 from table1 where...)),
但是可以在后面那个table1加上别名就没有问题了。
insert into table1 values(字段1,(select T.字段2 from table1 T where...))
5.MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。也可以自定义函数实现oracle的nextval。
6.翻页的sql语句处理,MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数,例如:select * from table limit m,n,意思是从m+1开始取n条。
三.常见的函数替换
1.日期转换方面的函数
oracle | mysql | 说明 |
to_char(date,’yyyy-MM-dd hh24:mi:ss’) | date_format(date,'%Y-%m-%d %H:%i:%s') | 注意时间格式的对应 |
to_date(str,’yyyy-MM-dd hh24:mi:ss’) | str_to_date(str,'%Y-%m-%d %H:%i:%s') | 注意时间格式 |
to_char()、to_number() | convert(字段名,类型) | 类型转换 |
date + n | date_add(date,interval n day) | 日期增加n天 |
add_months(date,n) | date_add(date,interval n month) | 日期增加n个月 |
date1 - date2 | datediff(date1,date2) | 日期相减获取天数 |
2.oracle中decode()函数,可以用case when进行替换
例子:
Oracle:select decode(a,b,c,d) as col1 from table1;
Mysql:select
case
when a=b then c
when a!=b then d
end as col1
from table1
3.oracle的函数 ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2),根据col1分组,在分组内根据col2排序,改函数计算的值就表示每组内部排序后的顺序编号。
Mysql没有这个函数,可以用mysql的用户变量来实现
例子:
Oracle:select row_number() over(partition by col1 order by col2) as num from table1
Mysql:select num1 as num from (select if(@pdept=col1,@rank:=@rank+1,@rank:=1) as num1,@pdept:=col1 from table1 order by col2 ) H
这里用到mysql的用户变量。
4.oracle的行号ROWNUM,mysql没有这个行号,也需要用用户变量来实现。
例子:
Oracle:select * from table1 where rownum - col1=0
Mysql: select * from table1,(SELECT (@rowNum := 0)) HH where (@rowNum := @rowNum + 1) - col1=0
5.Oracle 中的 substr (hello,a,b) mysql中是substring(hello,a,b) oracle的a=0和a=1是一样的,都是从第一个开始。Mysql是从0开始。
6.Oracle的nvl()对应mysql的ifnull()。
7.Oracle 中的WMSYS.WM_CONCAT(),列转行函数,以逗号隔开,mysql可以用GROUP_CONCAT()进行替换。
8.Oracle的||可以用mysql的+替代,但是mysql在往某列加上字符时应该用concat,
例如给表中name字段加上x:update table1 set name=concat(x,name)。
9.oracle函数instr('abc','a')返回a在字符串中的位置 返回1
mysql可以这样替换locate('a','abc')返回1
10.在mybatis的mapper中like语句的区别
Oracle中like '%'||#{OPTYPE_NAME,jdbcType=VARCHAR}||'%'
Mysql中like CONCAT('%',#{OPTYPE_NAME,jdbcType=VARCHAR},'%')
以上均是实际的操作总结出来的,希望对大家有所帮助。