Oracle转到mysql遇到的常见问题和Oracle与MySQL语法区别。


一.常用字段类型区别

oracle

mysql

number10,0

int

number10,2

decimal10,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.oracledecode()函数,可以用case when进行替换

例子:

Oracleselect decode(a,b,c,d) as col1 from table1;

Mysqlselect

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的用户变量来实现

例子:

Oracleselect row_number() over(partition by col1 order by col2) as num from table1

Mysqlselect 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的行号ROWNUMmysql没有这个行号,也需要用用户变量来实现。

例子:

Oracleselect * 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中是substringhello,a,b)  oraclea=0a=1是一样的,都是从第一个开始。Mysql是从0开始。

6.Oraclenvl()对应mysqlifnull()

7.Oracle 中的WMSYS.WM_CONCAT(),列转行函数,以逗号隔开,mysql可以用GROUP_CONCAT()进行替换。

8.Oracle||可以用mysql+替代,但是mysql在往某列加上字符时应该用concat

例如给表中name字段加上xupdate table1 set name=concatxname)。

9.oracle函数instr'abc','a')返回a在字符串中的位置  返回1

mysql可以这样替换locate'a','abc')返回1

10.在mybatismapperlike语句的区别

Oraclelike '%'||#{OPTYPE_NAME,jdbcType=VARCHAR}||'%'

Mysqllike CONCAT('%',#{OPTYPE_NAME,jdbcType=VARCHAR},'%')


以上均是实际的操作总结出来的,希望对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值