Oracle与MySQL迁移语法兼容
发布日期:2021-06-28 20:47:05 浏览次数:2 分类:技术文章

本文共 3087 字,大约阅读时间需要 10 分钟。

Oracle与MySQL迁移语法兼容

最近项目上使用Oracle的系统,需要兼容MySQL,原本使用到的SQL语法需要修改以兼容到MySQL。先记录下目前遇到的问题,后续会继续更新。

1,Oracle NVL()
这个函数用的比较多,功能就是从两个表达式返回一个非 null 值,
MySQL:IFNULL(expr1,expr2),也有相同功能
如果第一个参数的表达式 expression 为 NULL,则返回第二个参数的备用值。

2,Oracle 中日期格式化

Oracle中常用to_char(),to_date()这两个函数,MySQL中有对应的函数

date_format(date,'%Y-%m-%d') -------------->oracle中的to_char();str_to_date(date,'%Y-%m-%d') -------------->oracle中的to_date();

另外日期格式的表达式也不相同

%Y:代表4位的年份%y:代表2为的年份%m:代表月, 格式为(01……12)%c:代表月, 格式为(1……12)%d:代表月份中的天数,格式为(00……31)%e:代表月份中的天数, 格式为(0……31)%H:代表小时,格式为(00……23)%k:代表小时,格式为(0……23)%h:代表小时,格式为(01……12)%I: 代表小时,格式为(01……12)%l:代表小时,格式为(1……12)%i: 代表分钟, 格式为(00……59)%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)%T:代表 时间,格式为24 小时(hh:mm:ss)%s:代表 秒,格式为(00……59)

3,Oracle 日期时间的计算,后一天,上个月之类的

MySQL中计算,正数表示往后,负数往前计算

SELECT DATE_ADD('2013-01-29 13:50:27', INTERVAL 1 DAY);                -> '2013-01-30 13:50:27'SELECT DATE_ADD('2013-01-29 13:50:27', INTERVAL 1 HOUR);                -> '2013-01-29 14:50:27'SELECT DATE_ADD('2013-01-29 13:50:27', INTERVAL 1 MONTH);               -> '2013-02-28 13:50:27'

4,Oracle字符串拼接

Oracle中常用 ‘||’进行字段拼接,而在MySQL中用concat()拼接,返回结果为连接参数产生的字符串。

5,Oracle 的decode

在Oracle中使用decode方法可以轻松实现代码和值之间的转换,MySQL中没有直接的方法可以使用,但是我们可以通过下面两种方法来实现:

1.case when then    如:Select title,case Emergency when 1 then '紧急'  else '普通' End  as  emergency   from already_sig2.if    如:select a.title,if(a.Emergency=1,'紧急','普通')emergency from already_sign a

6,Oracle With as

WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。
特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。如果WITH AS短语所定义的表名被调用两次以上,则优化器会自动将WITH AS短语所获取的数据放入一个TEMP表里,如果只是被调用一次,则不会。而提示materialize则是强制将WITH AS短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。

MySQL的做法就是把查询结果放到一个临时表

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name;

临时表中就储存了临时数据。当断开连接时,临时表自动删除。

临时表使用有一些限制条件:
1,临时表在 memory、myisam、merge或者innodb上使用,并且不支持mysql cluster簇);
show tables语句不会列出临时表,在information_schema中也不存在临时表信息;show create table可以查看临时表;
2,不能使用rename来重命名临时表。但是可以alter table rename代替:
mysql>ALTER TABLE orig_name RENAME new_name;
3,可以复制临时表得到一个新的临时表,如:
mysql>create temporary table new_table select * from old_table;
4,同一个query语句中,相同的临时表只能出现一次。但不同的临时表可以出现在同一个query语句中,如临时表temp_tb1, temp_tb2
可以使用:mysql> select * from temp_tb;
但不能使用:mysql> select * from temp_tb, temp_tb as t;
错误信息: ERROR 1137 (HY000): Can’t reopen table: ‘temp_tb’
5,临时表可以手动删除:
DROP TEMPORARY TABLE IF EXISTS temp_tb;

7,Oracle dblink

Oracle 通过dblink实现跨库访问,
MySQL 用federated就是我们说的dblink类似的功能。远程映射。

ENGINE=FEDERATED   CONNECTION='mysql://root:mengliang@192.168.2.142:3306/job_admin/ml_1';

原文链接:

8,Oracle 字段类型转换,to_char,to_number

Mysql中提供了两个内置函数提供我们使用分别为:CAST和CONVERT,Mysql 的CAST()和CONVERT() 函数可用来转换或者获取一个我们需要的类型。两者具体的语法如下:

CAST(value as type);CONVERT(value, type);可以转换的类型是有限制的。这个类型可以是以下值其中的一个:二进制,同带binary前缀的效果 : BINARY    字符型,可带参数 : CHAR()     日期 : DATE     时间: TIME     日期时间型 : DATETIME     浮点数 : DECIMAL      整数 : SIGNED     无符号整数 : UNSIGNED

9,Oracle 产生随机数和随机字符串,dbms_random.value

Oracle中产生随机数:
MySQL中产生随机数的方法:

转载地址:https://blog.csdn.net/yangjjuan/article/details/93035006 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Python】爬虫:微博找人页面爬虫(一)
下一篇:【Kettle】Kettle增量抽取模型

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月01日 13时20分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

深入浅出Android性能调优,附大厂真题面经 2019-04-29
深入解析Android-AutoLayout,全网疯传 2019-04-29
深入解析android核心组件和应用框架,最全Android知识总结 2019-04-29
深入解析android核心组件和应用框架,社招面试心得 2019-04-29
深度解析跳槽从开始到结束完整流程,持续更新中 2019-04-29
深度解析跳槽从开始到结束完整流程,面试真题解析 2019-04-29
hashmap扩容过程,字节大神强推千页PDF学习笔记,经典好文 2019-04-29
kotlin面试题!Android大厂高频面试题解析,薪资翻倍 2019-04-29
kotlin面试题!一口气拿了9家公司的offer,已拿offer入职 2019-04-29
retrofit优点,互联网寒冬公司倒闭后,年薪50W 2019-04-29
retrofit原理面试,Android性能优化最佳实践,面试必备 2019-04-29
【工作感悟】Android多进程从头讲到尾,offer拿到手软 2019-04-29
【微信小程序】面试一路绿灯Offer拿到手软,好文推荐 2019-04-29
Android之内存泄漏调试学习与总结,分享PDF高清版 2019-04-29
事件分发机制怎么回答,Android开发究竟该如何学习,使用指南 2019-04-29
事件分发机制流程图,带你全面理解View的绘制流程,附大厂真题面经 2019-04-29
Android最强进程保活黑科技实现原理解密及方法,含BATJM大厂 2019-04-29
Android最强进程保活黑科技实现原理解密及方法,帮你突破瓶颈 2019-04-29
Android架构师教你如何突破瓶颈,内含福利 2019-04-29
Android架构组件Room功能详解,全网独家首发! 2019-04-29