在项目中将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;

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

被折叠的 条评论
为什么被折叠?



