有时候查询的时候会进行拆分,对某串字符串进行拆分的时候可以用:
select regexp_substr('aaaaa,bbbb,cc,ddddd,ee','[^,]+',1,level)
from dual
connect by level = regexp_count('aaaaa,bbbb,cc,ddddd,ee',',')+1;
对于表中的每一行进行拆分,则需自身与自身递归,但是connect by deptno = prior deptno 会报错误,所以呢需要使用prior dbms_random.value is not null 来欺骗oracle
例: select t.*,regexp_substr(t.ename,'[^,]+',1,level)
? from emp_bak t
? connect by level = regexp_count(t.ename,',')+1
? and? t.ename = prior t.ename
? and prior dbms_random.value is not null;
例如表名为test,数据如下
原数据为
然后用如下语句
select?*?from
union?all
order?by?col1
得到的数据就是
A ?1
B ?1
本文个人拙见,若有出入,请指出——来自菜的颤抖
所以必须将分号分割的记录,拆分成单独的记录.
变成:
Oracle可使用 regexp_substr函数 实现,实现上面切割的sql为:
其中 regexp_substr 各个参数的含义:
好了,这部分意图很明显了,下面就是把它每一个切割串取出来,看到上面取 level个 ,而这个 level 是个什么东西呢,在这个之前,先看 regexp_count(string, c) 函数,这个函数其实很好理解,返回string中c的个数.
然后就是这个level,这是一个伪列,和RowNum相似,
所以再回到最初的sql,也就很好理解了.
通过instr和truncate函数进行拆分.
以上就是土嘎嘎小编为大家整理的oracle如何拆分分录相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!