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通过一个字段的值将一条记录拆分为多条记录的主要内容,如果未能解决你的问题,请参考以下文章