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

Docker 容器编排技术解析与实践
探索了容器编排技术的核心概念、工具和高级应用,包括 Docker Compose、Kubernetes 等主要平台及其高级功能如网络和存储管理、监控、安全等。此外,文章还探讨了这些技术在实际应用中的案例,提供了对未来趋势的洞见。 一、容器编排介绍 容器编…...
微信小程序 ---- 慕尚花坊 订单列表
订单列表 本章节为课堂作业 01. 封装订单列表接口 API 思路分析: 为了方便后续进行商品管理模块的开发,我们在这一节将商品管理所有的接口封装成接口 API 函数 落地代码: ➡️ api/orderpay.js /*** description 获取订单列表* returns …...

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

移动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(Yellowdog Updater, Modified)源是一个软件包管理器,它可以自动处理依赖关系并安装、更新、卸载软件包。YUM源是一个包含软件包的远程仓库,它可以让用户轻松地安…...
2024.2.10力扣每日一题——二叉树的中序遍历
2024.2.10 题目来源我的题解方法一 递归方式方法二 非递归方式 题目来源 力扣每日一题;题序:94 我的题解 方法一 递归方式 使用递归实现,结果List也可以定义为一个类变量。 按照访问左子树——根节点——右子树的方式遍历这棵树࿰…...

MVP惊现神秘买家,或疑为华尔街传奇投资人?
随着距离美国总统大选已不足240天,全球都开始聚焦这次具有历史意义的重大事件,作为全球唯一的超级大国,美国大选的最终结果,将会更深远的影响世界的走向。 除了我们熟知的全球性安全问题,美国这次大选更是一次意识形态…...

观察者模式 C++
👂 Honey Honey - 孙燕姿 - 单曲 - 网易云音乐 目录 🌼前言 🌼描述 🎂问题 💪解决方案 🈲现实场景 代码 场景1 -- 报纸发行 场景 解释 代码 场景2 -- 气象资料发布 场景3 -- 过红绿灯 &#x…...
每日一题 --- 删除字符串中的所有相邻重复项[力扣][Go]
删除字符串中的所有相邻重复项 题目:1047. 删除字符串中的所有相邻重复项 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所…...

前端三剑客 —— CSS (第四节)
目录 内容回顾: 1.常见样式 2.特殊样式 特殊样式 过滤效果 动画效果 动画案例: 渐变效果 其他效果: 多列效果 字体图标(icon) 内容回顾: 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 项目中进行环境变量的声明,那么需要在项目的根目录下,新建 .env.[mode] 文件用于声明环境变量,如: .env.test 文件用于测试环境下项目全局变量的声明.env.dev 文件用于开发环境下项目全…...

C++读取.bin二进制文件
C读取.bin二进制文件 在C中,可以使用文件输入/输出流来进行二进制文件的读写操作,方便数据的保存和读写。 //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个整数,输出绝对值最大的那个数。 输入 输入包含3个int范围内的整数,用空格隔开。 输出 输出三个数中绝对值最大的数,单独占一行。若绝对值最大的数不唯…...

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

机器学习第33周周报Airformer
文章目录 week33 AirFormer摘要Abstract一、论文的前置知识1. 多头注意力机制(MSA)2. 具有潜变量的变分模型 二、文献阅读1. 题目2. abstract3. 问题与模型阐述3.1 问题定义3.2 模型概述3.3 跨空间MSA(DS-MSA)3.4 时间相关MSA&…...
设计模式(12):代理模式
一.核心作用 通过代理,控制对对象的访问;可以详细控制访问某个对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。 二.核心角色 抽象角色: 定义代理角色和真实角色的公共对外方法;真实角色: 实现抽…...
前端9种图片格式基础知识, 你应该知道的
彩色深度 彩色深度标准通常有以下几种: 8位色,每个像素所能显示的彩色数为2的8次方,即256种颜色。16位增强色,16位彩色,每个像素所能显示的彩色数为2的16次方,即65536种颜色。24位真彩色,每个…...

ChatGPT 与 OpenAI 的现代生成式 AI(上)
原文:Modern Generative AI with ChatGPT and OpenAI Models 译者:飞龙 协议:CC BY-NC-SA 4.0 序言 本书以介绍生成式 AI 领域开始,重点是使用机器学习算法创建新的独特数据或内容。它涵盖了生成式 AI 模型的基础知识,…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...