请问一下这样的需求可以实现吗?

请问一下这样的需求可以实现吗?
http://www.itpub.net/thread-1511467-1-1.html

 

bell6248

对于表A字段state的拆分可以使用如下的方法, 接着就可以进行进一步处理了!

select t1.*,
       substr(',' || t1.state || ',',
              instr(',' || t1.state || ',', ',', 1, t2.rn) + 1,
              instr(',' || t1.state || ',', ',', 1, t2.rn + 1) - instr(',' || t1.state || ',', ',', 1, t2.rn) - 1) c
from
tb_a t1,
(select rownum rn from dual connect by rownum <= (select max(length(state) - length(replace(state, ',', ''))) from tb_a) + 1) t2
where length(t1.state) - length(replace(t1.state, ',', '')) + 1 >= t2.rn
order by t1.historyid, t2.rn;

dingjun123

你这个可以直接将两边的加逗号,然后instr >0就可以了,如果要拆分也可以
SQL>    SELECT * FROM test;

         A B
---------- ------------------------------
         1 1,2,3
         2 8,4,5,7

SQL>
SQL>  SELECT a, SUBSTR (b,
  2             INSTR (b, ',', 1, rn  ) + 1,
  3             INSTR (b, ',', 1, rn+1)
  4             - INSTR (b, ',', 1, rn) -1 ) b
  5    FROM (SELECT a, ','||b||',' AS b
  6                FROM test) test,
  7    (SELECT LEVEL rn FROM DUAL
  8                       CONNECT BY LEVEL<=(SELECT MAX(length(trim(translate(b,replace(b,','),' '))))+1 FROM test))
  9  WHERE SUBSTR (b,
10             INSTR (b, ',', 1, rn  ) + 1,
11             INSTR (b, ',', 1, rn+1)
12             - INSTR (b, ',', 1, rn) -1 ) IS NOT NULL
13  ORDER BY b,rn;

         A B
---------- ----------------------------------------------------------------
         1 1
         1 2
         1 3
         2 4
         2 5
         2 7
         2 8

7 rows selected

SQL>
SQL>  SELECT a,REGEXP_SUBSTR(b,'[^,]+',1,rn) b
  2    FROM test,(SELECT LEVEL rn FROM DUAL
  3                       CONNECT BY LEVEL<=(SELECT MAX(length(trim(translate(b,replace(b,','),' '))))+1 FROM test))
  4  WHERE REGEXP_SUBSTR(b,'[^,]+',1,rn) IS NOT NULL
  5  ORDER BY b,rn;

         A B
---------- ------------------------------------------------------------
         1 1
         1 2
         1 3
         2 4
         2 5
         2 7
         2 8

7 rows selected

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷月宫主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值