Oracle中:sys_guid():根据时间和机器码生成全球唯一的序列号; MySQL中为UUID()
Oracle中:nvl(s,1):s不为null则输出s,否则输出1 ; MySQL中为IFNULL(s,1)
Oracle中:sysdate timestamp 标准时间 ;MySQL中为unix_timestamp(now())
Oracle中:decode()大致等同于switch;MySQL中可用case when、then
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字段
CREATE FUNCTION getrank(`subject` varchar(100))
BEGIN
IF @sub=subject THEN
SET @rank:=@rank+1;
SET @sub:=subject;
ELSE
SET @rank:=1;
SET @sub:=subject;
END IF;
RETURN @rank;
END;