Oracle转Mysql需要注意的地方

一、nvl()函数:

(1)oracle中的nvl()函数:

语法:

nvl(expr1,expr2)

含义:

如果expr1为空那么返回expr2,如果expr1值不为空,则返回expr1。

(2)mysql中的”nvl()”函数:

语法:

if null(expr1,expr2)

含义:

如果expr1为空那么返回expr2,如果expr1值不为空,则返回expr1。

二、decode()函数:

(1)oracle中的decode()函数:

语法:

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,默认值)

含义:

当条件的值等于值1的时候,返回值1,当条件的值等于值2的时候,返回值2,当条件的值等于值n的时候,返回值n,如果条件与值1-值n都不想等,则返回默认值。相当于java中的if-else。

(2)mysql中的”decode()”函数:

语法:

ifnull(
           etl(
                 filed(col,…)
                                        )
                                            )

filed函数:

语法:filed(str,str1,str2,str3……..)

含义:返回str在str1,str2,str3…..中的位置,假如str=str1,则返回1,;假如str=str2,则返回2。。。。。假如str1-strn中都没有str的值,则返回0。

注意:如果str 为NULL,则返回值为0 ,原因是NULL不能同任何值进行同等比较。

elt函数:

语法:elt(N,str1,str2,str3,…strn)

含义:如果N=1,则返回str1,N=2,则返回str2,N>n,,则返回null。

ifnull函数:

语法:if null(expr1,expr2)

含义:如果expr1为空那么返回expr2,如果expr1值不为空,则返回expr1。

总结以上三个函数:

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,默认值)

等价于:

ifnull(elt(filed(条件,值1,值2….值n),返回值1,返回值2…..返回值n),默认值)

三、分页:

(1)oracle中的分页:

语法:

select * from(select t.* ,rownum r from 表名 t)where r>10 and r<20;

注意:

(1)表名必须要取别名:表名 t
(2)*前面必须要指明表的别名
(3)rownum 这个字段必须要用别名:,rownum r
(4)分页的范围必须要用别名进行判断: r>10 and r<20

(2)mysql中的分页:

语法:

SELECT * FROM 表名 LIMIT 起始值-1, 取多少条记录 ;

举例:

SELECT * FROM 表名 LIMIT 20, 10 ;

说明:从第21条记录开始去10条记录,即取得是21,22,23,24,25,26,27,28,29,30这10条记录。

四、字符串截取:

(1)oracle中的字符串截取:

语法:

select substr(“目标字符串”,开始坐标,结束坐标) from dual;

这里写图片描述

这里写图片描述

这里写图片描述

注意:

oracle中的下标可以从0开始,也可以从1开始,而且两个效果是一样的,但是如果从-1开始则是取最后一个,截取长度这个参数将会失效

这里写图片描述

这里写图片描述

注意:

oracle中是没有substring这个函数的

(2)mysql中的字符串截取:

语法一:

select substr(“目标字符串”,开始坐标,截取长度) from dual;

这里写图片描述

这里写图片描述

这里写图片描述

注意:

1、myql中的下标不能0开始
2、mysql下标也可以从-1开始,情况和orace一样

语法二:

select substring(“目标字符串”,开始坐标,截取长度) from dual;

这里写图片描述

这里写图片描述

注意:

myql中的substr和substring函数是一样的效果

语法三:

select mid(“目标字符串”,开始坐标,截取长度) from dual;

这里写图片描述

注意:

myql中的substr、mid和substring这三个函数是一样的效果

语法四:

select left(“目标字符串”,从左侧第一个开始的截取长度) from dual;

这里写图片描述

语法五:

select right(“目标字符串”,从右侧最后一个开始的截取长度) from dual;

这里写图片描述

五、结果集拼接(用,隔开):

(1)oracle中的wm_concat函数:

语法:

select 字段1 wm_concat(字段2) from 表名 group by 字段1;

注意:

wm_concat是分组函数,前面查询的字段需要在后面group by一下,如果不group by一个字段的话将会把所有行的字段2都用逗号拼接起来

例子:

这里写图片描述

(2)mysql中的group_concat函数:

语法:

select 字段1 group_concat(字段2) from 表名 group by 字段1;

注意:

1、group_concat也是分组函数,前面查询的字段同样需要在后面group by一下,如果不group by一个字段的话将会把所有行的字段2都用逗号拼接起来—–例子和oracle一样,这里就不举例了,或者详情可以参考:https://blog.csdn.net/tuesdayma/article/details/80284595

2、如果字段2中的值为null的时候,group_concat函数是不会留,给那个null值的,比如有三条记录,中间那条记录的字段2是null值,那么group_concat之后拼接出来的字段就只有两个值,即:记录1的字段2,记录3的字段2,而不是记录1的字段2,,记录3的字段2

六、uuid:

(1)oracle中获取uuid:

语法:

INSERT INTO 表名 VALUES ((select lower(sys_guid()) from dual), 值2, 值3);

(2)mysql中获取uuid:

语法:

INSERT INTO 表名 VALUES (replace(uuid(), ‘-‘,”), 值2,值3);

七、字符串转数字:

(1)oracle中数字转字符串:

语法:

select * from 表 order by to_number(字段);

(2)mysql中数字转字符串:

语法一:

select * from 表 where deleted=0 order by Convert(字段,int);

语法二:

select * from 表 where deleted=0 order by CAST(字段 as int);

语法三:

select * from 表 where deleted=0 order by (ordernumber+0);