mysql实现oracle的connect By一行转多行功能

在数据库迁移过程中,从Oracle转换到MySQL时,需要对特定的SQL语法进行调整。本文介绍了如何将Oracle中的connectby和regexp_substr函数改写成MySQL兼容的查询,利用mysql.help_topic表实现行转列的功能,从而将一行参数拆分为多行。通过示例展示了如何使用SUBSTRING_INDEX和SUBSTRING_INDEX配合帮助表完成相同操作。

在项目中将oracle数据库变更为mysql数据库的时候,在储存过程中遇见了connect by与regexp_substr这个关键字,作用是将一行参数转为多行参数

oracle


  select regexp_substr('1,2,3,4,5', '[^,]+', 1, rownum) lzh
        from dual
      connect by rownum <= length(regexp_replace('1,2,3,4,5', '[^,]+'));

在这里插入图片描述
现在要将之改为mysql数据库,就要使用到数据库自带的mysql.help_topic表来属性拆分,help_topic表就是实现行转列功能

解决办法如下:

mysql

SELECT
	SUBSTRING_INDEX(
		SUBSTRING_INDEX('1,2,3,4,5',',',help_topic_id + 1),',' ,- 1) lzh
FROM
	mysql.help_topic
WHERE
	help_topic_id < (LENGTH('1,2,3,4,5')) - LENGTH(REPLACE ('1,2,3,4,5', ',', '')) + 1;

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值