关于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 模型的基础知识,…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
