关于Oracle的一些内置函数在MySQL中的使用(row_number() over(partition by xxx order by xxx))

Oracle中:sys_guid():根据时间和机器码生成全球唯一的序列号;  MySQL中为UUID() 
Oracle中:nvl(s,1):s不为null则输出s,否则输出1 ; MySQL中为IFNULL(s,1)
Oracle中:sysdate timestamp 标准时间 ;MySQL中为sysdate ()
Oracle中:decode()大致等同于switch;MySQL中可用case when then

to_number() 将其他类型转换成数字类型;  MySQL中可用cast(value as type)实现
to_char(value,'格式') 将其他类型转换成字符串类型并确定格式;  MySQL中视情况使用concat()还是date_format()
to_date() 将其他类型转换成字符串类型并确定格式;  MySQL中使用str_to_date(date,'%y-%m-%d %H:%i:%s') 

计算时间差
Oracle:select round(to_number(endtime-starttime)) from dual;其中默认为天;

当时间差计算为小时时:select round(to_number(endtime-starttime)*24) from dual;
mysql: TIMESTAMPDIFF(DAY,starttime,endtime)

Oracle中:row_number() over(partition by clineID order by statname)根据clineID分组statname排序赋给序号

这个函数并没有现成的函数去进行替换,我在做的时候找到了一种方法,不过稍微繁琐一些。

比如说我们查询一张成绩表,根据学科分组,成绩排序,那么在Oracle中是这样的

SELECT username,subject,grade,row_number(partition by subject order by grade) rank from performance

在MySQL中,我们需要做这么两步;

1、根据学科和成绩进行排序

2、为分组的成绩插入序号

那么,我们就需要用到函数来实现给分组排序的效果

SELECT username,subject,grade,getrank(subject) rank from performance order by subject,grade

函数是为了返回一个序号给rank字段

delimiter &&
CREATE FUNCTION getrank( subject varchar( 100 ) )
returns int( 10 )
BEGIN
	IF @sub=subject THEN   
		SET @rank := @rank+1;   
		SET @sub := subject;
	ELSE    
		SET @rank := 1;    
		SET @sub := subject; 
	END IF;       
return @rank;
END &&
delimiter ;

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值