Oracl如何实现e逗号分隔列转行
如果我们在oracle中给出一个权限编号,就需要在逗号分隔的多个权限编号中去匹配给出的这个权限编号,那么Oracl如何实现e逗号分隔列转行呢?下面我们就去看看吧。
下面给出该方法的示例:
select a,b,c from
(with test as (select 'aaa' a,'bbb' b,'1,2,3' c from dual)
select a,b,substr(t.ca,instr(t.ca, ',', 1, c.lv) + 1,instr(t.ca, ',', 1, c.lv + 1) - (instr(t.ca, ',', 1, c.lv) + 1)) AS c
from (select a,b,',' || c || ',' AS ca,length(c || ',') - nvl(length(REPLACE(c, ',')), 0) AS cnt FROM test) t,
(select LEVEL lv from dual CONNECT BY LEVEL
执行以上代码,结果如下图:
模拟数据列 c 中的内容“1,2,3”被转成了三行,前面两列的内容同时附带过去。在实际运用时,只要把
select 'aaa' a,'bbb' b,'1,2,3' c from dual 替换成实际需要转换的数据表中的字段即可,其中c字段必须是要进行转换的保存逗号分隔内容的字段。下面的内容都可以不需要更改。其中“LEVEL
以上就是小编介绍Oracl如何实现e逗号分隔列转行的内容,如果我们在oracle中使用like去做的话,不仅影响效率还会是的匹配的结果不准确,因此需要sql语句就可以实现列转行
上一篇:学习Oracle数组
下一篇:关于oracle性能优化