Oracle 根据一行数据的某个字段内容拆行(connect by level)
今天有个同事问我能不能根据行的指定字段内容进行拆行,例如该行字段内容:2C18E570;2C18DE70 根据 分号拆出两行
数据量大时优先选用,效率非常高
一眼望穿,非常简单毕竟从事Oracle 已经10多年了,比这个更变态的需求都遇到过,归根还得要对 Connect by level 运用非常熟悉
select eco_number, assembly_item, so_number, no_impl_wo, substr(wo_number /*替换拆分的列*/, instr(wo_number /*替换拆分的列*/, ';', 1, levels.lvl) + 1, instr(wo_number /*替换拆分的列*/, ';', 1, levels.lvl + 1) - (instr(wo_number /*替换拆分的列*/, ';', 1, levels.lvl) + 1)) as test1 /*替换拆分的列*/ from (select cev.eco_number, cev.assembly_item, cev.so_number, cev.no_impl_wo, --在这里增加需要显示的字段 ';' || wo_number /*替换拆分的列*/ || ';' as wo_number /*替换拆分的列*/, length(wo_number /*替换拆分的列*/) - nvl(length(replace(wo_number /*替换拆分的列*/, ';')), 0) + 1 as cnt from cux_eco_update_woso_v cev /*替换表*/ ) a, (select rownum as lvl from (select max(length(wo_number /*替换拆分的列*/ || ';') - nvl(length(replace(wo_number /*替换拆分的列*/, ';')), 0)) max_len from cux_eco_update_woso_v /*替换表*/ ) connect by level <= max_len) levels where levels.lvl <= a.cnt order by eco_number;
效果:
相同的:
select eco_number, assembly_item, so_number, no_impl_wo, ssx, substr(wo_number /*替换拆分的列*/, instr(wo_number /*替换拆分的列*/, ';', 1, levels.lvl) + 1, instr(wo_number /*替换拆分的列*/, ';', 1, levels.lvl + 1) - (instr(wo_number /*替换拆分的列*/, ';', 1, levels.lvl) + 1)) as test1 /*替换拆分的列*/ from (select cev.eco_number , cev.assembly_item, cev.so_number, cev.no_impl_wo, cev.wo_number ssx, --在这里增加需要显示的字段 ';' || wo_number /*替换拆分的列*/ || ';' as wo_number /*替换拆分的列*/, length(wo_number /*替换拆分的列*/) - nvl(length(replace(wo_number /*替换拆分的列*/, ';')), 0) + 1 as cnt from cux_eco_update_woso_v cev /*替换表*/ ) a, (select rownum as lvl from (select max(length(wo_number /*替换拆分的列*/ || ';') - nvl(length(replace(wo_number /*替换拆分的列*/, ';')), 0)) max_len from cux_eco_update_woso_v /*替换表*/ ) connect by level <= max_len) levels where levels.lvl <= a.cnt order by eco_number
结果:根据 2C18E570;2C18DE70 内容的分号 拆分了成了两行
执行计划也是相当优秀的
本文来自博客园,作者:Iven_lin,转载请注明原文链接:https://www.cnblogs.com/ivenlin/p/18121204
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了