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 ;