一、数据类别
- Number类别
MySQL中是没Number类别的,但有int/decimal类别,
Oracle中的Number(5,1)相关联MySQL中的decimal(5,1),
Number(5) 相关联int(5)。MySQL中的双蝴类别较为多,
分的也较为细,除了tinyint、smallint、mediumint、bigint等类别- Varchar2(n)类别
MySQL中相关联OracleVarchar2(n)类别的替代类别是varchar(n)类别。- Date 类别
MySQL 中的日期时间类别有Date、Time、Datetime等类别,
MySQL中Date类别仅表示日期(年-月-日),Time类别仅表示时间(时:分:秒),
而Datetime类别表示日期时间(年-月-日 时:分:秒),
Oracle中的Date类别和MySQL中的Datetime类别一致。二、函数
- length(str)函数
Oracle中的length(str)是获取字符串长度的函数,MySQL中相关联的函数为char_length(str)。- sys_guid()函数
Oracle中可通过sys_guid()函数是生成随机序列,MySQL通过UUID()生成随机序列。- 时间格式化函数
将时间转换为字符串型时间MySQLdate_format(NOW(),%Y-%m-%d) 相关联Oracle的Oracle中的to_char(sysdate,YYYY-MM-DD);
将字符串型时间转换为时间类别MySQLstr_to_date(2019-01-01,%Y-%m-%d) 相关联Oracle中的to_date(2019-01-01,YYYY-MM-DD);
包括时分秒的函数转换:DATE_FORMAT(NOW(),%Y-%m-%d %H:%i:%s),str_to_date(2019-01-01,%Y-%m-%d %H:%i:%s)。- 条件函数(nvl()、nvl2()、decode())
nvl(tab.columnName,0):如果tab.columnName值为空,则返回值取0,否则取tab.columnName;相关联的MySQL函数为:ifnull(tab.columnName,0)。
nvl2(expr1,expr2,expr3):如果expr1不为null,则返回expr2,否则返回expr3;相关联的MySQL函数为:if(expr1,expr2,expr3)。
DECODE(value, val1, val2, val3):如果value等于val1,则返回val2,否则返回val3;MySQL可用IF函数表示:if(value=val1, val2, val3);
DECODE(value, if1, val1, if2,val2,...,ifn, valn, val):如果value等于if1,则返回val1,如果value等于if2,则返回value2...如果value等于ifn,则返回valn,否则返回val;
MySQL对于这种判断可以通过casewhenthenelseend;l来判断,即:casewhenvalue=if1 then val1whenvalue=if2 then val2,,,whenvalue=ifn then valnelseval end;- trunc()函数
TRUNC(12.123):返回整数(12);MySQL相关联的函数:truncate(12.123,0);TRUNC(12.123,2):返回值保留2为小数(12.12);MySQL相关联的函数:truncate(12.123,2);TRUNC(SYSDATE):返回值为(2019-07-2600:00:00);MySQL相关联的为cast(now() as datetime):返回值为(2019-07-2614:11:38);MySQL的cast函数句法为:CAST(xxx AS 类别)
可用类别为:
二进制,同带binary前缀的效果:BINARY;
字符型,可带参数:CHAR();
日期:DATE;
时间:TIME;
日期时间型:DATETIME;
浮点数:DECIMAL;
整数:SIGNED;
无符号整数:UNSIGNED)- to_char()、to_number()
to_char(123):将数字123转换为字符串123;MySQL相关联的函数为CAST(123AS CHAR(3));to_number(123):将字符串数字123转换为数字类别;MySQL相关联的函数为cast(123as SIGNED);- sysdate 当前时间
sysdate:返回当前日期+时间;MySQL相关联的函数为now();三、其他
- 引号
MySQL可识别双引号和单引号,Oracle只能识别单引号。- 字符串连接符 ||
Oracle 可用||来连接字符串,但MySQL不支持||连接,MySQL可通过concat()函数链接字符串。
Oracle的 a.studentname||【||a.studentno||】相当于 MySQL的 concat(a.studentname,【, a.studentno,】)- ROWNUM
Oracle可通过rownum获取前n条记录,MySQL通过limit来获取前n条记录,但二者的写法略有不同,在Oracle中rownum作为where条件的一部分,而MySQL中limit不是where条件的一部分。
-- rownum句法如下:SELECT*FROMXJ_STUDENTWHEREROWNUM=1;-- 查询第一条数据SELECT*FROMXJ_STUDENTWHEREROWNUM<=10;-- 获取前10条数据-- 但rownum不支持查询后几条或第n(n>1)条数据,例如以下sql是不支持的SELECT*FROMXJ_STUDENTWHEREROWNUM>2;SELECT*FROMXJ_STUDENTWHEREROWNUM=3;-- limit 句法如下:SELECT * from fw_department limit 3; -- 查询前3条数据SELECT*fromfw_departmentlimit2,4;-- 从第2(序号从0开始)条开始,查4条记录- 空数据排序(nulls first 和nulls last)
-- null值排在最前SELECT*FROMFW_DEPARTMENT AORDERBYA.REMARKDESCNULLSFIRST-- null值排在最后SELECT*FROMFW_DEPARTMENT AORDERBYA.REMARKDESCNULLSLAST-- MySQL 可通过IF和ISNULL函数达到相同的效果-- null值排在最后select*fromFW_DEPARTMENT AorderbyIF(ISNULL(A.REMARK),1,0),A.REMARKdesc-- null值排在最前select*fromFW_DEPARTMENT AorderbyIF(ISNULL(A.REMARK),0,1),A.REMARKdesc- 表(左/右)关联(+)
Oracle左连接,右连接可以使用(+)来实现. MySQL只能使用left join ,right join等关键字。
-- Oracle 左关联select*fromtaba, tabbwheretaba.id = tabb.id(+) ;-- Oracle 右关联select*fromtaba, tabbwheretaba.id(+) = tabb.id;-- MySQL 左关联select*fromtabaleftjointabbontaba.id=tabb.id;-- MySQL 右关联select*fromtabarightjointabbontaba.id=tabb.id;- with
Oracle 中可用with来构建两个临时表,但MySQL不支持with,相关联临时表,MySQL可通过小括号的方式来处理,但构建的临时表必须设置临时表名。
-- Oracle with使用WITHTMPTABAS(SELECTA.DEPIDFROMFW_DEPARTMENT A
)SELECTDEPIDFROM TMPTAB-- MySQL 构建临时表使用(此处必须给括号中的临时表设置表名)selectb.depidfrom (selectdepidfromfw_department
) b 
