9159金沙游艺场


IO【转换流,打印流,序列化】,io序列化
图片 2
关于启用 HTTPS 的一些经验分享(二)

Oracle和Mysql语法异同整理笔记

最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想自定义函数或者找到替换函数的方法进行改造。

@[toc]最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想自定义函数或者找到替换函数的方法进行改造。

[TOC]继上一篇博客《Oracle学习笔记整理手册》之后,我再写一篇Mysql版本的

Oracle递归查询oracle实现递归查询的话,就可以使用start with …
connect by

所以本博客主要介绍Oracle兼容mysql改造方式以及注意事项,也就是介绍原本Oracle一些函数在Mysql的替换方法等等,适合给原本是Oracle版本的项目,想兼容Mysql版本。

PS:本博客收录自己工作中遇到学到的一些mysql技能,有时间就更新整理一下

connect by递归查询基本语法是:

模糊匹配

Oracle的模糊匹配和mysql是不同的,在mybatis项目里,用Oracle,我们可能会这样写:where a like '%'|| #{参数} ||'%',不过放在mysql就不兼容了,mysql的做法是这样的where a like concat('%', #{参数} ,'%')

str_to_date

oracle有to_date函数,Mysql的格式是str_to_date(‘2019-02-12 11:34:32’,
‘%Y-%m-%d %H:%i:%s’)

select 1 from 表格 start with ... connect by prior id = pId 

删除数据

一个小细节,在Oracle里删除数据,delete 表格 t where t.id = '?' 或者
delete from 表格 t where t.id = '?'
不加关键字from或者用和不用别名t都是可以的,不过放在mysql5.X就不可以了,其它Mysql版本没验证过,Mysql版本要求必须加关键字from同时不能加别名
delete from 表格 where id = '?'

递归查询

oracle实现递归查询的话,就可以使用start with … connect
by,mysql并没有通过类似函数,解决方法是通过自定义函数的方法,具体可以参考我这篇博客

start
with:表示以什么为根节点,不加限制可以写1=1,要以id为123的节点为根节点,就写为start
with id =123

时间函数

Oracle的时间函数和Mysql的时间函数是不同的,Oracle的格式是to_date(‘2019-02-12
14:20:22’, ‘yyyy-mm-dd
hh24:mi:ss’),Mysql的格式是str_to_date(‘2019-02-12 11:34:32’,
‘%Y-%m-%d %H:%i:%s’)

排序问题

oracle做数据排序的时候,有时候可以用nulls first或者nulls
last将null值排在最前或者最后。不过迁到Mysql的话,mysql并没有提供类似函数,所以要怎么实现?下面给出解决方法:null值排在最后,用Mysql的IF和ISNULL函数。如果为空返回1,否返回0

select * from A order by IF,1,0),a
desc1null值排在最前,用Mysql的IF和ISNULL函数。如果为空返回0,否返回1

select * from A order by IF,0,1),a
desc1具体可以参考我写的这篇博客:

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图