首页 > 数据库 >ORCLE与MySQL的相互转化

ORCLE与MySQL的相互转化

时间:2024-10-12 12:10:56浏览次数:7  
标签:ORCLE eva mysql question detail 转化 item base MySQL

1.情景展示

在实际开发中,不同的地方可能所需使用的数据库是不同的。

这就要求,我们开发的程序需要兼容不同的数据库,放到程序里面就是:

需要有不同类型的sqlMap文件。
以既要兼容MySQL,也要兼容Oracle进行举例说明。

2.准备工作

第一步

根据已经写好的一套sql进行复制,然后,在原有sql的基础上修改成对应数据库所支持的SQL。

第二步

修改mapper.xml的扫描路径

以及分页插件的数据库类型

第三步

修改数据库连接配置

MYSQL

spring:
  datasource:
  url: jdbc:mysql://192.168.0.1:3306/test?useUnicode=true&characterEncoding=utf8
    username: 123
    password: 123
    driverClassName: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size: 200

ORACLE

spring:
  datasource:
    url: jdbc:oracle:thin:@192.168.1.1:1521:orcl
    username: TEST
    password: TEST
    driverClassName: oracle.jdbc.driver.OracleDriver
    hikari:
      maximum-pool-size: 200

3.具体转换

字符串拼接

MYSQL使用concat()

<if test="code != null and code != ''">
	and code like CONCAT('%',#{code},'%')
</if>

ORACLE使用管道符||

<if test="code != null and code != ''">
	and code like '%' || #{code} || '%'
</if>

虽然ORACLE也可以使用CONCAT()连接字符串,但是,它只能将两个字符串拼接到一起。

如果需要拼接2个以上的字符串,只能嵌套N次,形如:

CONCAT(CONCAT('%',#{code}),'%')

字符串转日期

 

日期转字符串

mysql使用DATE_FORMAT()

<if test="endTime != null">
	,DATE_FORMAT(#{endTime},'%Y-%m-%d 23:59:59') as endTime
</if>
DATE_FORMAT(base_eva_detail.create_time,'%Y-%m-%d %H:%i:%s') as create_time,

在mysql中,%c表示月份,个位数月份前面不会自动补零;

而%m表示月份,个位数月份前面将会自动补零。

ORACLE使用TO_CHAR()

<if test="endTime != null">
	,TO_CHAR(#{endTime},'YYYY-MM-DD 23:59:59') as endTime
</if>
TO_CHAR(base_eva_detail.create_time, 'YYYY-MM-DD HH24:MI:SS') as create_time,

系统时间

mysql使用now()

date_format(now(),'%Y-%c-%d')

oracle使用SYSDATE

TO_CHAR(SYSDATE, 'YYYY-MM-DD')

IF()函数

MYSQL

<if test="orgId != null and orgId != ''">
	and if(boi.ORGSEQ is not null, boi.ORGSEQ like CONCAT('%',#{orgId},'.%'), boi.ORGID = #{orgId})
</if>

ORALCE

ORALCE没有IF函数

<if test="orgId != null and orgId != ''">
	AND (
		(boi.ORGSEQ IS NOT NULL AND boi.ORGSEQ LIKE '%' || #{orgId} || '%'
		OR
		boi.ORGID = #{orgId})
	)
</if>

ifnull()/NVL() 

mysql使用ifnull()

ifnull(sum(base_eva_question_detail.eva_value),0) as allScore,
ifnull(trim(at.city_name), '') as city_name,

ORALCE使用NVL()

NVL(sum(base_eva_question_detail.eva_value),0) as allScore,
NVL(trim(at.city_name),'') as city_name,

将多行数据合并成一行

 mysql使用group_concat()

<foreach collection="headers" item="item" index="index">
	<if test="item.evaQuestionType == 1">
		,GROUP_CONCAT( CASE eva_question_num WHEN '${item.evaQuestionNum}' THEN base_eva_question_detail.eva_answer END ) '${item.dataKey}'
	</if>
	<if test="item.evaQuestionType == 6 || item.evaQuestionType == 5">
		,GROUP_CONCAT( CASE eva_question_num WHEN '${item.evaQuestionNum}' THEN base_eva_question_detail.eva_answer  END )'${item.dataKey}'
	</if>
</foreach>

ORACLE使用LISTAGG()

<foreach collection="headers" item="item" index="index">
	<if test="item.evaQuestionType == 1">
		,LISTAGG(CASE eva_question_num WHEN '${item.evaQuestionNum}' THEN base_eva_question_detail.eva_answer END) '${item.dataKey}'
	</if>
	<if test="item.evaQuestionType == 6 || item.evaQuestionType == 5">
		,LISTAGG(CASE eva_question_num WHEN '${item.evaQuestionNum}' THEN base_eva_question_detail.eva_answer END)'${item.dataKey}'
	</if>
</foreach>

分页查询

mysql使用limit

SELECT
	*
FROM
	sso_access_token
WHERE
	`status` = 1
  AND user_id = #{userId}
  AND user_name = #{userName}
ORDER BY
	create_time DESC
LIMIT 0,1

oracle使用ROWNUM

<![CDATA[
	SELECT *
	FROM (
		SELECT *
		FROM sso_access_token
		WHERE status = 1
		AND user_id = #{userId}
		AND user_name = #{userName}
		ORDER BY create_time DESC
	)
	WHERE ROWNUM <= 1
]]>

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

标签:ORCLE,eva,mysql,question,detail,转化,item,base,MySQL
From: https://www.cnblogs.com/Marydon20170307/p/18460263

相关文章

  • cmakelist 源码生成so 文件 orthanc mysql
    cmakelist.txt#Orthanc-ALightweight,RESTfulDICOMStore#Copyright(C)2012-2016SebastienJodogne,MedicalPhysics#Department,UniversityHospitalofLiege,Belgium#Copyright(C)2017-2023OsimisS.A.,Belgium#Copyright(C)2024-2024Orthanc......
  • Starrocks表的数据库字段类型及与MySQL 的差异
    最近有用到Starrocks,实际使用中基本可以当作mysql来使用,但是数据库字段还是有所不同的。与MySQL相同或相似的基础类型数值类型TINYINT、SMALLINT、INT/INTEGER、BIGINT:在Starrocks和MySQL中的定义和用途基本相似。都是用于存储整数,范围也和MySQL中的对应类型相同,例如TI......
  • 【电商搜索】现代工业级电商搜索技术-中科大-利用半监督学习改进非点击样本的转化率预
    【电商搜索】现代工业级电商搜索技术-中科大-利用半监督学习改进非点击样本的转化率预测0.论文信息RecSys24:UtilizingNon-clickSamplesviaSemi-supervisedLearningforConversionRatePrediction@inproceedings{huang2024utilizing,title={UtilizingNon-cli......
  • 泛微e-cology安装报错 MySQL初始化问题Table 'ecology.e9_para_xxx' doestn't exist
    在安装泛微e-cology9进行初始化数据库时出现如下报错Table 'ecology.e9_para_xxx'doestn'texist 明明是在初始化数据库  数据表不存在不是很正常==经过研究  发现泛微在初始化数据库时 会执行存储过程脚本  使用dbeaver可以看到 根据代码逻辑看  如......
  • MySQL数据备份
    MySQL数据备份是数据库管理员非常重要的工作之一。系统意外崩溃或者硬件的损坏都可能导致数据的丢失,因此MySQL管理员应该定期地备份数据,使得在意外情况发生时最大限度地减少损失。本节将介绍数据备份的3种方法。11.1.1 使用mysqldump命令备份数据mysqldump是MySQL提供的一个非......
  • mysql数据库服务器错误怎么回事
    MySQL数据库服务器错误可能由多种原因导致,这里列举一些常见的问题及其解决方法:服务未启动检查MySQL服务是否已经启动。在命令行中使用 netstartmysql (Windows)或 sudoservicemysqlstart (Linux)来尝试启动MySQL服务。配置文件错误确认my.cnf(Linux)或my.ini(Window......
  • 在Java程序中监听mysql的binlog
    目录1、背景2、mysql-binlog-connector-java简介3、准备工作1、验证数据库是否开启binlog2、开启数据库的binlog3、创建具有REPLICATIONSLAVE权限的用户4、事件类型eventType解释1、TABLE_MAP的注意事项2、获取操作的列名5、监听binlog的position1、从最新的binlog位置开始监......
  • MySQL 时间类型 DATE、DATETIME和TIMESTAMP
    1.DATE、DATETIME和TIMESTAMP表达的时间范围TypeRangeRemarkDATE'1000-01-01' to '9999-12-31'只有日期部分,没有时间部分DATETIME'1000-01-0100:00:00' to '9999-12-3123:59:59'时间格式为 YYYY-MM-DDhh:mm:ss,默认精确到秒TIMESTAMP '1970-01-0100:00:01......
  • 毕设项目案例实战II基于Java+Spring Boot+MySQL的学生选课系统的设计与实现(源码+数据
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着信息技术的飞速发展和教育信息化的不......
  • MySQL 表的增删改查、表约束
    本篇博客主要用来记录和分享本人学习MySQL数据库的基本操作指令的笔记和心得,包括数据表操作、数据管理、数据类型的讲解以及表的约束。通过实际的示例和注意事项,帮助大家更好地理解和应用这些知识。一、数据表操作指令1.1创建数据表使用CREATETABLE指令可以创建一个新的数......