1、分页

  1. mysql: LIMIT 0,1
  2. oracle: ROWNUM <= 1

情景①:mysql中不含ORDER BY

-- mysql
SELECT * FROM 表名 LIMIT 1-- oracle
SELECT * FROM 表名  WHERE ROWNUM <= 1

情景②:mysql中含ORDER BY

-- mysql
SELECT * FROM 表名 ORDER BY 字段名 DESC LIMIT 1 -- oracle
SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT * FROM 表名 ORDER BY 字段名 DESC) TMP WHERE ROWNUM <= 1 )
WHERE ROW_ID > 0;

温馨小知识:SQL SELECT语句执行顺序

  1. FROM子句组装来自不同数据源的数据
  2. WHERE子句基于指定的条件对记录进行筛选
  3. GROUP BY子句将数据划分为多个分组
  4. 聚集函数进行计算
  5. HAVING子句筛选分组
  6. 计算所有表达式
  7. ORDER BY对结果进行排序

2、oracle中字段名不能使用符号 " ` " 包括

-- mysql
SELECT `字段名` FROM 表名-- oracle
SELECT 字段名 FROM 表名

3、字符串拼接

注: Oracle中CONCAT函数只能放两个参数,因此改为 || 拼接

  1. mysql: CONCAT('%', 'xxx' , '%')
  2. oracle: '%' || 'xxx' || '%'
-- mysql
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE CONCAT('%','helloworld','%')-- oracle
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE ('%' || 'helloworld' || '%')

4、date类型时间转10位时间戳

  1. mysql: UNIX_TIMESTAMP
  2. oracle: ORACLE_TO_UNIX (注:此函数为步骤三中手动创建的,并非oracle自带哦!)

5、字段名Oracle关键字需加上双引号

温馨小提示: 字段名需大写,如果Java实体类对应字段为小写,映射的别名注意需保持原本小写与之对应 ~

例如:

  1. level -> "LEVEL"
  2. user -> "USER"
  3. number -> "NUMBER"
  4. desc -> "DESC"
  5. date -> DATE

6、判断是否为 NULL: 如果x为NULL,则返回value,否则返回x值本身

  1. mysql: IFNULL(x, value)
  2. oracle: NVL(x, value)

7、日期时间互换

前mysql,后oracle

  1. 字符串类型转时间类型: STR_TO_DATE -> TO_DATE
  2. 时间类型转指定字符串类型: DATE_FORMAT -> TO_CHAR
  3. 获取系统当前时间: NOW() -> SELECT SYSDATE FROM DUAL
-- 时间类型转指定字符串类型
SELECT DATE_FORMAT( NOW(),'%Y-%m-%d %H:%i:%s');             -- mysql
SELECT TO_CHAR( SYSDATE,'yyyy-MM-dd HH24:mi:ss') FROM DUAL; -- oracle-- 字符串类型转时间类型
SELECT STR_TO_DATE( NOW(), '%Y-%m-%d %H');             -- mysql
SELECT TO_DATE( '2020-01-09', 'yyyy-MM-dd') FROM DUAL; -- oracle 【 注:oracle中前者字符串时间的格式需与后者转换格式相同哦~ 】-- 获取系统当前时间
SELECT NOW(); -- mysql
SELECT SYSDATE + 8/24 FROM DUAL; -- oralce 【注:如果服务器时间没有相差8小时则无需加上`8/24`】-- mysql
SELECT YEAR( NOW() );     -- 求年份
SELECT QUARTER( NOW() );  -- 求季度
SELECT MONTH( NOW() );    -- 求月份-- oracle
SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL; -- 求季度

另外这里给出小编所用到的时间标识符格式

-- 前:mysql             后:oracle
"%Y-%m-%d %H:%i:%S"     "yyyy-MM-dd HH24:mi:ss"
"%Y-%m-%d %H:%i:%s"     "yyyy-MM-dd HH24:mi:ss"
"%Y-%m-%d %H:%i"        "yyyy-MM-dd HH24:mi"
"%Y-%m-%d %H"           "yyyy-MM-dd HH24"
"%Y-%m-%d %h"           "yyyy-MM-dd HH"
"%Y-%m-%d"              "yyyy-MM-dd"
"%Y-%m"                 "yyyy-MM"
"%Y"                    "yyyy"
"%H"                    "HH24"
"%k"                    "HH24"

8、判断时   字段类型必须相同

这里注意是必须,可能在oracle版本不同的情况下,老版本不同类型也会查询出来,但建议还是改为相同类型关联,避免以后数据库版本升级出现问题!!!

建议小转大,比如:数字转字符串;并使用CONCAT去修改类型,因为mysql和oracle都支持此函数,并且不会在特殊类型上出现问题 ~

-- ex: `JOIN` 关联表时 两张表的关联`字段类型`必须`相同`
SELECT a.*,b.*
FROM 表1 a
LEFT JOIN 表2 b on a.字符串类型字段 = CONCAT(b.数字类型字段, '')

9、批量插入

-- mysql
<insert id="insertBatch" databaseId="mysql">INSERT INTO 表名( `字段名1`, `字段名2`, `字段...`) VALUES<foreach collection="list" item="item" separator="," open="(" close=")">#{item.字段1},#{item.字段2},#{item中的每一个字段名...}</foreach>
</insert>-- oracle
<insert id="insertBatch" databaseId="oracle">INSERT INTO 表名(字段名1,字段名2,xxx...)SELECT A.*FROM(<foreach collection="list" item="item" index="index" separator="UNION ALL" >SELECT#{item.字段1},#{item.字段2},#{item中的每一个字段名...}FROM DUAL</foreach>) A
</insert>

10、分组 GROUP BY

oracle中GROUP BY分组后,查询出来的所有字段(除分组字段)必须为聚合函数的字段,否则会报错!

解决:

  1. 查询字段改为聚合函数
  2. 使用如下分析函数 OVER (Partition BY ...) 及开窗函数
-- mysql
SELECT 字段名,xxx... FROM 表名 GROUP BY 分组字段-- oracle
SELECT*
FROM (SELECT tb.*, ROW_NUMBER ( ) OVER ( PARTITION BY tb.分组字段 ORDER BY tb.排序字段 DESC ) AS resultFROM (SELECT 字段名,xxx... FROM 表名 -- 此处为查询sql,去掉`GROUP BY`分组条件,将分组字段加到上面 【 注:此sql的查询字段中要么全是聚合函数字段,要么都不是! 】) tb
) WHERE result = 1

11、Oracle中表的别名不能用AS, 列的别名可以用AS

why ?:为了防止和Oracle存储过程中的关键字AS冲突的问题

MyBatis快速将MySQL转换成Oracle语句相关推荐

  1. Javamysql语法转化oracle_MyBatis项目实战 快速将MySQL转换成Oracle语句

    一.前言 因项目需求,小编要将项目从mysql迁移到oracle中 ~ 现在将完成 基于MyBatis-Plus将项目中的MySQL语句全部转换成Oracle语句 大概实现步骤: 将项目改成支持双库配 ...

  2. 如何将DB2数据库转换成Oracle数据库,这一篇告诉你

    墨墨导读:众所周知,数据库升级.转换.迁移是数据库运维必备的日常技能,本文详细介绍一则将DB2数据库转换成Oracle数据库的案例,希望对大家有帮助. 1. 前言 记录一则使用sql develope ...

  3. 一分钟快速将ogg转换成MP3格式

    很多人对于ogg的这种格式认知还停留在很久之前,这种格式刚出来的时候也是非常受人追捧的,但是随着MP3格式的出现,它就慢慢的淡出了人们的视线,即使这样大家在下载东西的时候有可能还会遇到这种格式,如果我 ...

  4. 在线快速将pdf转换成word

    在线快速将pdf转换成word 处理同样1000个PDF文件的格式转换,在线PDF转换成Word转换器比普通PDF转换器快8-12倍以上,是一款全自动化的转换模式,为用户提供了高质量的PDF转换服务的 ...

  5. 如何快速将pdf转换成cad呢?

    我们在工作中会遇到各种文件格式,最常见的就是pdf文件格式.但有不少小伙伴不喜欢用pdf文件,认为内容不容易修改.那么当我们工作中不得不把PDF转换成其他文件格式的时候,我们应该怎么做呢?下面就由小编 ...

  6. 怎么快速把音乐转换成mp3格式

    喜欢听歌的用户肯定少不了平时下载歌曲,有些用户现在可能觉得歌曲的格式不是那么的重要,但是如果你们想要出门的时候在手机播放或者开车的时候想要在车内播放歌曲,那么这个时候你们就会知道格式的重要性了,像这种 ...

  7. 怎样快速将pdf转换成word转换器在线

    怎样快速将pdf转换成word转换器在线 闲暇时候上网下载资料,发现绝大多数的文章都是以PDF格式发布的,使用复制粘贴的方法虽然可以将文字.图片等信息转移到Word文档中,但原PDF文档中的格式.编排 ...

  8. 电脑上快速将PDF转换成TXT的教程

    电脑上的PDF转TXT 的问题,很多小伙伴都选择了用手打字来进行实现,但是这种方法费时费力,并不是十 分适合在日常工作中的使用,那么下面小编就通过借助迅捷OCR文字识别软件,来为大家分享一个电脑上将P ...

  9. mysql换成oracle_从mysql转换到oracle数据库

    最近做了几个项目,我对项目的要求(有些也是客户的要求)都是既要能用mysql数据库,又要能用oracle数据库,开发时尽量用mysql,等到发布时要求两者都能适应.因为两种数据库还是许多具体的应用有些 ...

最新文章

  1. Sitecake – 可视化编辑,所见即所得的 CMS
  2. ClusterWare 服务介绍
  3. json key 命名规范_jsonapi
  4. [Luogu] 1600
  5. PostgreSQL、Greenplum 日常监控 和 维护任务
  6. 【代码笔记】iOS-长条蓝色button
  7. ZOJ4118 Stones in the Bucket
  8. 小米和腾讯的.NET笔面试题哪个更难?可自测附答案
  9. 桩筏有限元中的弹性板计算_永清县打桩机租赁钢板桩租赁怎么联系?
  10. 将中文标点符号替换成英文标点符号
  11. java集合框架类_Java集合框架总结—超详细-适合面试
  12. SpringCloud Hystrix微服务架构的高并发问题与解决策略
  13. javscript插件汇总
  14. 2018——广东工业大学校赛题解
  15. docker容器化部署
  16. android 图表实现,Android实现图表绘制和展示
  17. linux命令-查看日志
  18. 【AD】元件,导线,电气符号放置与操作
  19. 【神搜递归】统计问题
  20. 华师大 OJ 2966

热门文章

  1. Leetcode每日一题:191.number-of-1-bits(位1的个数)
  2. 树状数组相关应用之区间更新单点查询问题
  3. P3254 圆桌问题
  4. Android调用相册、相机(兼容6.0、7.0、8.0)
  5. 反向传播算法的详细解释(上)
  6. 二:Java+SpringBoot框架使用(返回cookies信息的get接口开发)
  7. 运行错误代码_Win7系统提示错误代码0xc0000135应该如何解决?
  8. java面相对象的关键字_Java面向对象关键字有哪些?
  9. 加密工具类 EncryptionUtils.java
  10. Java使用JNDI调用配置在服务器(Weblogic、Tomcat)的数据源配置