×

oracle mysql

最近公司有个项目需要使用springboot重构,以前的框架是struts和oracle,现在准备用MySQL,过程中遇到的问题

我的笔记 我的笔记 发表于2019-04-18 14:33:38 浏览3782 评论0

抢沙发发表评论

问题一:

    oracle的decode方法在MySQL中怎么弄

解决办法:

    oracle:  //在oracle中这样写,意思就是当字段值等于1会返回a,字段值等于2会返回b

decode(字段,1,a,2,b)


    mysql://在mysql中需要这样写

if(字段,1,a,if(字段,2,b,''))


问题二:

    oracle中rank() over()是非常好用的一个方法,但是mysql不支持分组排序,所以需要用子查询来实现

    oracle://在oracle中这样写的意思是先以字段1分组,然后以字段2排序,这样取rk等于1的就可以筛选最新一条数据

select a.*,rank() over(partition by a.字段1 order by a.字段2 desc) rk from 表 a

    mysql: //这条语句可以实现和oracle的rank() over()或者row_number() over()一样的功能,第一个第二个均可

SELECT  * FROM 表 a where a.字段2=(select MAX(b.字段2) from 表 b where b.字段1 = a.字段1)order by a.字段1
SELECT 
	r.字段1
FROM(
	SELECT 
		tmp.字段1,
		@rownum:=@rownum+1,
		if(@groupFiled=tmp.字段1,@rank:=@rank+1,@rank:=1) as rk,
		@groupFiled:=tmp.字段1
	FROM(
		SELECT
			字段1
		FROM 表 ORDER BY 字段1 asc,字段2 desc
	)tmp,(SELECT @rownum:=0,@groupFiled:=null,@rank:=0)a
)r


ps:语句中“表”都是数据库表,是同一个表,不是两张表

问题三:

    oracle中的自定义function转换成mysql中使用,我总结了一下几点

    1),oracle中创建方法是create or replace function 方法名

            mysql中是create function 方法名

    2),oracle中方法中的参数需要带in eg:create or replace function 方法名(id in varchar)

            mysql不需要in,但是需要指定参数的类型大小eg:create or replace function 方法名(id varchar(20))

    3),oracle中返回关键字是return,mysql中是returns

    4),oracle中定义变量是return varchar is 后边定义变量

            image.png

            mysql中是在begin中

            image.png

问题四:

    oracle中可以自定义split函数,来分割字符串,mysql中需要使用FIND_IN_SET('a','a,b,c,d')



我的笔记博客版权我的笔记博客版权