当前位置: 首页 > news >正文

关于oracle切换mysql8总结

最近由于项目换库,特此记录

1.字段类型

number(8) -> int(8)

number(16) -> bigint(16)

varchar2() -> varchar()

2.导数据

从oracle迁移数据到mysql,除了用专门的数据泵,经常需要用csv导入到mysql;

导出的csv数据如果有中文,需要先用记事本编辑成UTF-8再导入。

关于如何导出正确的csv如下:

1.对于有特殊字符的字段导入后提示不合法或者无法导入时

比如空格处理,有些oracle导出的csv数据含有不可见的换行符char(10)以及回车符chr(13)

比如有 / \ 的,一律使用如下查询消除,将\改为|,剔除回车、空格以及换行

replace(trim(replace(replace(id,chr(13),''),chr(10),'')),'\','|')

如果是clob字段,则先to_char ,然后如上一样的处理

 3.decode

oracle: update table set 字段=decode() where ...

mysql: update table set 字段=case when ... end where ...

4.rownum字段

如果是where条件后面,比如rownum=1改为 limit 1

如果是select后面,比如

select rownum from dual

改为

 SELECT
    ( SELECT @rownum := @rownum + 1 FROM ( SELECT @rownum := 0 ) rownum ) 
FROM
DUAL

5.mysql设置默认时间的字段

select CURRENT_DATE #2024-04-01
select CURRENT_TIME #15:02:54
select CURRENT_TIMESTAMP #2024-04-01 15:03:13 

 6.左右连接

对于a.id=b.id(+) 用left join,a.id(+)=b.id用right join

7.nvl函数

nvl() -> ifnull()

8.merge函数

这个比较有意思,mysql8没有能够实现的函数,代码里多写几个接口吧

9.关于时间的sql改造

记得有一次从oracle导入时间的数据,到了mysql发现时间少了8小时,注意下东八区(GMT+8)问题;

整型: to_number(id)  改为  cast(id as unsigned int)

浮点型:to_number(id)  改为  cast(id as decimal(10,2))

数字转字符串:to_char(id)  改为  convert(id,char)

时间之类的:

to_char(sysdate,'yyyy-mm-dd').  改为 date_format(字段,'%Y-%m-%d')

 (yyyy-mm-dd hh24:mi:ss) -> (%Y-%m-%d %H:%i:%s)

或者(%Y-%m-%d %T)

对于oracle的timestamp类型的数据查询导出时候需要转成年月日时分秒

因为数据长这样:21-4月 -21 02.15.29.556170 下午

这样导入mysql会报错

to_char(wo_date,'yyyy-mm-dd hh24:mi:ss')

然后mysql里字段相应设置为datetime/timestamp即可,注意时区问题,

如果是年月日,mysql对应为date类型

10.关于时间sql运算改造

有趣的是oracle的timestamp类型字段可以直接加减乘除,对,有的业务需要除;

比如字段+1则直接按天加:

字段名+1

mysql里得这样:

date_add(sysdate(),interval 1 day),减写成-1

这个是按天,按月如下

date_add(date_format('2024-01-02','%Y-%m-%d'),interval -8 month)

两个时间相差天数

datediff(time1,time2)

两个日期相差月数

timestampdiff(month,字段,now()) 

11.trunc函数

trunc(1.2233)对应mysql truncate(1.2233,0).  0默认保留整数位

trunc(日期)对应date_format(日期,'%Y-%m-%d')

12.拼接函数

mysql通过concat(字段,字段) 实现拼接 ||

13.start with ... connect by

这个函数着实用了不少时间改造,因为mysql5根本无法实现,必须是mysql8以上的。

这个用于带有组织表数据的分组函数,prior跟随父字段查该条件以上节点,否则查子节点

比如:

select orgId from org z 

start with z.orgid='32401'

connect by prior z.orgid = z.parentorgId;

 改造成mysql需要 使用 with recursive函数

with recursive z1(orgId) as (

     select z0.orgId from org z0 where z0.orgid='32401'

union alll

    select z2.orgid from org z2, z1

where z2.parentorgId = z1.orgId

)

select * from z1;

如果查询父节点, 则绿色部分改为 z2.orgId=z1.parentorgId

14.nulls last/first

order by id nulls last. -> order by if(isnull(id),1,0),id

order by id nulls first -> order by if(isnull(id),0,1),id

15.connect by+level

 oracle比如:

select sysdate+1-rownum sday,level from dual connect by level<=8;

这个忘记是什么业务了,不好直接改,可以先建个表,名叫temp_num,字段只有一个rn(int),然后数据是1-100000,差不多够用就行,这个辅助表会方便很多

后期看到直接套以下语句即可

select rn,date_format(date_add(now(),interval rn-8 day),'%Y-%m-%d %T') sday, 

           8+1-rn

from temp_num tn

where rn<=8;

再来一组:

select trunc(to_date(#{lastDate},'yyyy-mm-dd')) - level +1 DDATE from dual

connect by level<=#{dateSize}

复杂了点,改为

select date_format(date_add(#{lastDate},

interval rn-#{dateSize} day), '%Y-%m-%d') DDATE

from temp_num tn

where rn<=#{dateSize}

 再来一组复杂的

select (to_date('2024-01-01','yyyy-mm-dd') + level -1 ) as every_day

from dual

connect by level<=(trunc(to_date('2024-02-01','yyyy-mm-dd')) -

trunc(to_date('2024-01-01','yyyy-mm-dd')) + 1)

这里的日期是实际上是作为参数传递的,这样写可以直接测试用

改为

SELECT
    rn,date_add( date_format( '2024-01-01', '%Y-%m-%d' ),
    INTERVAL datediff( date_format( '2024-02-01', '%Y-%m-%d' ),
    date_format( '2024-01-01', '%Y-%m-%d' ))+1-rn DAY ) AS every_day 
FROM
    temp_num tn 
WHERE rn <= datediff(date_format( '2024-02-01', '%Y-%m-%d' ),date_format( '2024-01-01', '%Y-%m-%d' )) +1

再比如

SELECT
    add_months ( to_date ( '2024-01-01', 'yyyy-mm-dd' ),- LEVEL + 1 ) dates 
FROM
    DUAL connect BY LEVEL <= 12

改为

SELECT date_add(date_format('2024-01-01','%Y-%m-%d'),interval rn-12 month) as dates
    from temp_num tn
    where rn<=12

上述代码如果复制运行报错,则是空格导致的,删除空格重新写,内容没有问题

16.listagg函数

listagg within group 改为 group_concat

listagg(字段, ';') 改为  group_concat(字段 separator ';')

再比如复杂一点的

listagg(to_char(stat_date,'MM/dd') || '!' || flag, ',') within group(order by stat_date) as data

改为

group_concat(concat(date_format(stat_date,'%m/%d'),'!',flag) order by stat_date SEPARATOR ',') as data

 17.释放表空间

delete from table ,对应myisam会立刻释放表空间,InnoDB不会;

所以在delete之后执行optimize table tableName会释放

如果optimize不支持,

先alter table tableName engine=InnoDB,

再 analyze table tableName

相关文章:

关于oracle切换mysql8总结

最近由于项目换库&#xff0c;特此记录 1.字段类型 number(8) -> int(8) number(16) -> bigint(16) varchar2() -> varchar() 2.导数据 从oracle迁移数据到mysql&#xff0c;除了用专门的数据泵&#xff0c;经常需要用csv导入到mysql&#xff1b; 导出的csv数据如果…...

Docker 容器编排技术解析与实践

探索了容器编排技术的核心概念、工具和高级应用&#xff0c;包括 Docker Compose、Kubernetes 等主要平台及其高级功能如网络和存储管理、监控、安全等。此外&#xff0c;文章还探讨了这些技术在实际应用中的案例&#xff0c;提供了对未来趋势的洞见。 一、容器编排介绍 容器编…...

微信小程序 ---- 慕尚花坊 订单列表

订单列表 本章节为课堂作业 01. 封装订单列表接口 API 思路分析&#xff1a; 为了方便后续进行商品管理模块的开发&#xff0c;我们在这一节将商品管理所有的接口封装成接口 API 函数 落地代码&#xff1a; ➡️ api/orderpay.js /*** description 获取订单列表* returns …...

Tuxera2023 NTFS for Mac下载,安装和序列号激活

对于必须在Windows电脑和Mac电脑之间来回切换的Mac朋友来说&#xff0c;跨平台不兼容一直是一个巨大的障碍&#xff0c;尤其是当我们需要使用NTFS格式的硬盘在Windows和macOS之间共享文件时。因为Mac默认不支持写入NTFS磁盘。 为了解决这一问题&#xff0c;很多朋友会选择很便捷…...

移动Web学习04-移动端订单结算页PC端个人中心页面

5、电商结算页面案例 css body{background-color: #F2F2F2; } * {box-sizing: border-box;margin: 0;padding: 0; }.main{padding: 12px 11px 80px; }.pay{display: flex;height: 80px;background-color: #fff;bottom: 0;width: 100%;border-top: 1px solid #ededed;position:…...

Linux基础篇:Linux网络yum源——以配置阿里云yum源为例

Linux网络yum源——以阿里云为例 一、网络yum源介绍 Linux中的YUM&#xff08;Yellowdog Updater, Modified&#xff09;源是一个软件包管理器&#xff0c;它可以自动处理依赖关系并安装、更新、卸载软件包。YUM源是一个包含软件包的远程仓库&#xff0c;它可以让用户轻松地安…...

2024.2.10力扣每日一题——二叉树的中序遍历

2024.2.10 题目来源我的题解方法一 递归方式方法二 非递归方式 题目来源 力扣每日一题&#xff1b;题序&#xff1a;94 我的题解 方法一 递归方式 使用递归实现&#xff0c;结果List也可以定义为一个类变量。 按照访问左子树——根节点——右子树的方式遍历这棵树&#xff0…...

MVP惊现神秘买家,或疑为华尔街传奇投资人?

随着距离美国总统大选已不足240天&#xff0c;全球都开始聚焦这次具有历史意义的重大事件&#xff0c;作为全球唯一的超级大国&#xff0c;美国大选的最终结果&#xff0c;将会更深远的影响世界的走向。 除了我们熟知的全球性安全问题&#xff0c;美国这次大选更是一次意识形态…...

观察者模式 C++

&#x1f442; Honey Honey - 孙燕姿 - 单曲 - 网易云音乐 目录 &#x1f33c;前言 &#x1f33c;描述 &#x1f382;问题 &#x1f4aa;解决方案 &#x1f232;现实场景 代码 场景1 -- 报纸发行 场景 解释 代码 场景2 -- 气象资料发布 场景3 -- 过红绿灯 &#x…...

每日一题 --- 删除字符串中的所有相邻重复项[力扣][Go]

删除字符串中的所有相邻重复项 题目&#xff1a;1047. 删除字符串中的所有相邻重复项 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所…...

前端三剑客 —— CSS (第四节)

目录 内容回顾&#xff1a; 1.常见样式 2.特殊样式 特殊样式 过滤效果 动画效果 动画案例&#xff1a; 渐变效果 其他效果&#xff1a; 多列效果 字体图标&#xff08;icon&#xff09; 内容回顾&#xff1a; 1.常见样式 text-shadow x轴 y轴 阴影的模糊程度 阴影的…...

Linux文件IO(3):使用文件IO进行文件的打开、关闭、读写、定位等相关操作

目录 1. 文件IO的概念 2. 文件描述符概念 3. 函数介绍 3.1 文件IO-open函数 3.2 文件IO-close函数 3.3 文件IO-read函数 3.4 文件IO-write函数 3.5 文件IO-lseek函数 4. 代码练习 4.1 要求 4.2 具体实现代码 4.3 测试结果 5. 总结 1. 文件IO的概念 posix(可移植操作系统接…...

Vite 项目中环境变量的配置和使用

Vite 项目中环境变量的声明 我们要在 Vite 项目中进行环境变量的声明&#xff0c;那么需要在项目的根目录下&#xff0c;新建 .env.[mode] 文件用于声明环境变量&#xff0c;如&#xff1a; .env.test 文件用于测试环境下项目全局变量的声明.env.dev 文件用于开发环境下项目全…...

C++读取.bin二进制文件

C读取.bin二进制文件 在C中&#xff0c;可以使用文件输入/输出流来进行二进制文件的读写操作&#xff0c;方便数据的保存和读写。 //C读取bin二进制文件 int read_bin() {std::ifstream file("data_100.bin", std::ios::in | std::ios::binary);if (file) {// 按照…...

【ZZULIOJ】1038: 绝对值最大(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入3个整数&#xff0c;输出绝对值最大的那个数。 输入 输入包含3个int范围内的整数&#xff0c;用空格隔开。 输出 输出三个数中绝对值最大的数&#xff0c;单独占一行。若绝对值最大的数不唯…...

递归算法讲解2

前情提要 上一篇递归算法讲解在这里 递归算法讲解&#xff08;结合内存图&#xff09; 没看过的小伙伴可以进去瞅一眼&#xff0c;谢谢&#xff01; 递归算法的重要性 递归算法是非常重要的&#xff0c;如果想要进大厂&#xff0c;以递归算法为基础的动态规划是必考的&…...

机器学习第33周周报Airformer

文章目录 week33 AirFormer摘要Abstract一、论文的前置知识1. 多头注意力机制&#xff08;MSA&#xff09;2. 具有潜变量的变分模型 二、文献阅读1. 题目2. abstract3. 问题与模型阐述3.1 问题定义3.2 模型概述3.3 跨空间MSA&#xff08;DS-MSA&#xff09;3.4 时间相关MSA&…...

设计模式(12):代理模式

一.核心作用 通过代理&#xff0c;控制对对象的访问;可以详细控制访问某个对象的方法&#xff0c;在调用这个方法前做前置处理&#xff0c;调用这个方法后做后置处理。 二.核心角色 抽象角色&#xff1a; 定义代理角色和真实角色的公共对外方法;真实角色&#xff1a; 实现抽…...

前端9种图片格式基础知识, 你应该知道的

彩色深度 彩色深度标准通常有以下几种&#xff1a; 8位色&#xff0c;每个像素所能显示的彩色数为2的8次方&#xff0c;即256种颜色。16位增强色&#xff0c;16位彩色&#xff0c;每个像素所能显示的彩色数为2的16次方&#xff0c;即65536种颜色。24位真彩色&#xff0c;每个…...

ChatGPT 与 OpenAI 的现代生成式 AI(上)

原文&#xff1a;Modern Generative AI with ChatGPT and OpenAI Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 本书以介绍生成式 AI 领域开始&#xff0c;重点是使用机器学习算法创建新的独特数据或内容。它涵盖了生成式 AI 模型的基础知识&#xff0c…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)

这是系统中断服务程序的默认处理汇编函数&#xff0c;如果我们没有定义实现某个中断函数&#xff0c;那么当stm32产生了该中断时&#xff0c;就会默认跑这里来了&#xff0c;所以我们打开了什么中断&#xff0c;一定要记得实现对应的系统中断函数&#xff0c;否则会进来一直循环…...

Selenium 查找页面元素的方式

Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素&#xff0c;以下是主要的定位方式&#xff1a; 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...