From f9724dc9800a213407c86e55ef7cb48235fca7b8 Mon Sep 17 00:00:00 2001 From: whp98 Date: Mon, 6 Nov 2023 23:14:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=8D=9A=E5=AE=A2=EF=BC=8C?= =?UTF-8?q?=E6=97=B6=E9=97=B4:2023-11-06=2023:14:21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../index.md" | 1 + ...75\254mysql5.7\350\257\255\346\263\225.md" | 60 +++++++++++++++++++ .../index.md" | 2 + 3 files changed, 63 insertions(+) create mode 100644 "docs/\346\225\260\346\215\256\345\272\223/\346\225\260\346\215\256\345\272\223\346\224\271\351\200\240/Oracle\350\275\254mysql5.7\350\257\255\346\263\225.md" create mode 100644 "docs/\346\225\260\346\215\256\345\272\223/\346\225\260\346\215\256\345\272\223\346\224\271\351\200\240/index.md" diff --git "a/docs/\346\225\260\346\215\256\345\272\223/index.md" "b/docs/\346\225\260\346\215\256\345\272\223/index.md" index 0dea19c066..b799550a3a 100644 --- "a/docs/\346\225\260\346\215\256\345\272\223/index.md" +++ "b/docs/\346\225\260\346\215\256\345\272\223/index.md" @@ -2,3 +2,4 @@ - [Mysql数据库](./Mysql数据库/) - [Oracle数据库](./Oracle数据库/) - [Redis缓存](./Redis缓存/) +- [数据库改造](./数据库改造/) diff --git "a/docs/\346\225\260\346\215\256\345\272\223/\346\225\260\346\215\256\345\272\223\346\224\271\351\200\240/Oracle\350\275\254mysql5.7\350\257\255\346\263\225.md" "b/docs/\346\225\260\346\215\256\345\272\223/\346\225\260\346\215\256\345\272\223\346\224\271\351\200\240/Oracle\350\275\254mysql5.7\350\257\255\346\263\225.md" new file mode 100644 index 0000000000..5766ce099c --- /dev/null +++ "b/docs/\346\225\260\346\215\256\345\272\223/\346\225\260\346\215\256\345\272\223\346\224\271\351\200\240/Oracle\350\275\254mysql5.7\350\257\255\346\263\225.md" @@ -0,0 +1,60 @@ +# Oracle转MySQL5.7语法 + +## ROW_NUMBER() OVER() 转会话变量 +oracle语句 +```sql +SELECT TR2.HH_CODE, + TR2.RANK, + TR2.RANK_NUM, + ROW_NUMBER() OVER (PARTITION BY TR2.HH_CODE ORDER BY TR2.DATE DESC) RN +FROM TABLE_XX TR2 +WHERE TR2.DATE >='2022-10-10' and TR2.DATE < '2022-11-10' +``` +mysql语句 +```sql +SELECT TR2.HH_CODE, + TR2.RANK, + TR2.RANK_NUM, + (@row_number := CASE WHEN @prev_values = TR2.HH_CODE THEN @row_number + 1 ELSE 1 END) AS RN, + @prev_values := TR2.HH_CODE AS dummy +FROM TABLE_XX TR2 + JOIN + (SELECT @row_number := 0, @prev_values := '') AS vars +WHERE TR2.DATE >= '2022-10-10' + and TR2.DATE < '2022-11-10' +order by TR2.HH_CODE, TR2.DATE desc +``` +会话变量会在排序之后进行。如果多个字段分区就需要把多个字段拼起来赋值。 + +## NVL函数转 IFNULL 或者COALESCE + +这个就不贴sql,主要注意部分是,coalesce这个多个变量的时候数据类型要注意这个函数两个库都可以用,但是数据类型要一致,要不然会报错。 + +## DECODE转 CASE WHEN THEN 语句 +oracle语句 +```sql +select decode(1,1,'是','否') from dual; +``` +mysql语句 +```sql +select case when 1=1 then '是' else '否' end from dual; +``` + +## MERGE INTO 转 先删除后插入(在java种完成数据数据更新后插入) + +merge into 也可以用mysql的 insert on duplicate key代替前提是merge into 的关联条件是主键。 + +## LIST_AGG 使用 group_concat代替 + +如果需要排序,写法有些不同,注意一下。 + +## LAG函数进行改造,数据排序后把需要进行偏移关联的部分在java中实现 + +这个比较简单主要是一个for循环就搞定,主要注意偏移的量和取数据的时候的有序性。 + +## '||' 使用concat进行代替 +这个需要注意 mysql的concat支持多变量数据,oracle只能两个变量,所以多拼接的时候需要嵌套concat + + +## MYSQL所有嵌套都必须有别名 +oracle 的语句需要检查是不是都有别名。 \ No newline at end of file diff --git "a/docs/\346\225\260\346\215\256\345\272\223/\346\225\260\346\215\256\345\272\223\346\224\271\351\200\240/index.md" "b/docs/\346\225\260\346\215\256\345\272\223/\346\225\260\346\215\256\345\272\223\346\224\271\351\200\240/index.md" new file mode 100644 index 0000000000..75a465bc88 --- /dev/null +++ "b/docs/\346\225\260\346\215\256\345\272\223/\346\225\260\346\215\256\345\272\223\346\224\271\351\200\240/index.md" @@ -0,0 +1,2 @@ +# 数据库改造 +- [Oracle转MySQL5.7语法](./Oracle转mysql5.7语法.md)