Oracle通过一个字段的值将一条记录拆分为多条记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle通过一个字段的值将一条记录拆分为多条记录相关的知识,希望对你有一定的参考价值。

参考技术A 本文个人拙见,若有出入,请指出——来自菜的颤抖
该方式的效率不高,如何优化,请看 记Oracle中regexp_substr函数的一次调优(速度提高99.5%)

表A中存放了集装箱的信息,一个集装箱一条记录,表B中存放了对于集装箱操作的指令,一条指令包括多个集装箱箱号,通过分号 ; 切割( TCIU2347687;XUTR3546865 ),现在的需求是,对于已经在指令表B中的集装箱,在查询表A时需要过滤掉。

所以必须将分号分割的记录,拆分成单独的记录。

变成:

Oracle可使用 regexp_substr函数 实现,实现上面切割的sql为:

其中 regexp_substr 各个参数的含义:

结果就是 aaa , 如果把第二个1变成2,输出就是 bbb 。
好了,这部分意图很明显了,下面就是把它每一个切割串取出来,看到上面取 level个 ,而这个 level 是个什么东西呢,在这个之前,先看 regexp_count(string, c) 函数,这个函数其实很好理解,返回string中c的个数。
然后就是这个level,这是一个伪列,和RowNum相似,

所以再回到最初的sql,也就很好理解了。

以上是关于Oracle通过一个字段的值将一条记录拆分为多条记录的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何将一条记录拆分为多条记录

如何将oracle 中一条数据拆分成多条

oracle根据某个字段拆分成多条数据

oracle 查询 将一条变多条

oracle 如何将一个字段里的值拆分为多个值显示出来

如何使用 , 和 : Oracle 中的分隔符将 CLOB 对象拆分为多条记录