比较oracle与mysql的区别

本文详细对比了Oracle和MySQL在数据类型、常用函数等方面的差异,包括数值、时间、字符串类型的转换,以及日期处理、非空取值、多条件判断、字符串操作等函数的使用。在数据库迁移过程中,了解这些差异至关重要,能帮助你顺利地将Oracle SQL语句调整为适应MySQL的格式。同时,注意MySQL中的LIMIT用于获取指定数量记录,而Oracle使用ROWNUM。
摘要由CSDN通过智能技术生成

最近项目需要把oracle数据库改为mysql数据库,所以原有的SQL就需要改动一下。

以下是oracle和mysql的一些区别。

数据类型
oraclemysql备注
数值类型numberint/decimalOracle中的Number(10,2)对应MySQL中的decimal(10,2),Number(5) 对应 int(5)
时间类型date、timestamp、intervalDate、Time、Datetime等类型MySQL中Date类型仅表示日期(年-月-日),Time类型仅表示时间(时:分:秒),而Datetime类型表示日期时间(年-月-日 时:分:秒),Oracle中的Date类型和MySQL中的Datetime类型一致。
字符串类型Varchar2(n)varchar(n)
常用函数等差异
功能oraclemysql备注
日期转字符串to_char(sys_date, ‘yyyyMMdd’)date_format(sys_date,‘%Y%m%d’)
非日期转字符串to_char(200000.443133)cast(200000.443133 as char)MySQL可选类型: DATE:转换成日期。格式:“YYYY-MM-DD” DATETIME:转换成DATETIME 格式:“YYYY-MM-DD HH:MM:SS” TIME:转换成时间。格式:“HH:MM:SS” CHAR:转换成字符串 SIGNED:转换成签名(签名的64位整数) UNSIGNED:转换成UNSIGNED(无符号的64位整数) BINARY:转换 value 到BINARY(二进制字符串)
字符串转日期to_date(‘2022-03-18’, ‘yyyy-MM-dd’)str_to_date(‘2022-03-18’, ‘%Y-%m-%d’)
非空取值nvl(str, 0)ifnull(str,0)
多条件判断取值decode(Source, 1, ‘02’, 2, ‘01’, ‘03’)if(Source=1,‘02’,if(Source=2,‘01’,‘03’))
字符串拼接a||b 拼接concat(a,b)另oracle的空是null,mysql有null和’'两种,判断的时候注意
左连接,右连接左连接,右连接可以使用(+)left join ,right join
获取前面n条记录rownum获取前n条记录limit来获取前n条记录
返回不小于 X 的最小整数ceil(X)ceiling(X)
截取字符串substr(‘abcd’,2,2)substring(‘abcd’,2,2)
instr(‘abcdefg’,’ab’)locate(‘ab’,’abcdefg’)注意:locate的子串和总串的位置要互换
字符串长度length(str)char_length(str)
trunc(-1.002)cast(-1.002 as SIGNED)mysql可用的类型: 二进制,同带binary前缀的效果 : BINARY 字符型,可带参数 : CHAR() 日期 : DATE 时间: TIME 日期时间型 : DATETIME 浮点数 : DECIMAL 整数 : SIGNED 无符号整数 : UNSIGNED
字符串转数值类型to_number(str)cast(str AS SIGNED INTEGER)
当前日期SYSDATEnow() / SYSDATE()
日期加减Next_day(sysdate,7)DATE_ADD(sysdate() ,interval +7 day)DATE_ADD(d,INTERVAL expr type) type值:YEAR、MONTH、DAY、HOUR、WEEK
日期加减ADD_MONTHS(sysdate, 2)DATE_ADD(sysdate(), interval 2 month)
两个日期相差天数2个日期相减(D1-D2)DATEDIFF(date1,date2)
生成随机数列sys_guid()UUID()
其他区别

如 MySQL可识别双引号和单引号,Oracle只能识别单引号。

构建临时表:oracle可用with;mysql可用(),但必须加上临时表名

-- Oracle with使用
WITH tmptab AS (SELECT a.s_id FROM student a)
SELECT s_id FROM tmptab
 
-- MySQL 构建临时表使用(此处必须给括号中的临时表设置表名)
select b.s_id from (select s_id from student ) b 
相同部分

数字函数:round()、abs()、floor()、max()、min()、sum()

字符函数:ascii()、char()、replace()、coalesce()、instr()、lpad()、upper()、lower()、

开窗函数:ROW_NUMBER() OVER(PARTITION BY 分组字段 order by 排序字段 asc)

另外关于时间格式用法,可以学习:http://www.zzvips.com/article/45368.html

资料都是整理的!!!如有雷同,不是巧合。

(未完待续!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值