问题一:
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 后边定义变量
mysql中是在begin中
问题四:
oracle中可以自定义split函数,来分割字符串,mysql中需要使用FIND_IN_SET('a','a,b,c,d')