软件开发公司建的数据库,其中有个字段,里面的字符串是用|分隔的例如aaa    bbb        ccc          ddd
===================================
name1   350.00   AC|dfcc|370    TS
name2   552.21   CC|decc|560    LS
name3   410.22   F|bg|65        LZ这样的~现在要做加工。但是要把ccc字段中的字符串案|分隔的分别取出来做加工,要怎么样才能做到呢?
单纯用SQL语句可以么?还是有什么别的方法?
麻烦大家了

解决方案 »

  1.   

    create table tt_30(aaa varchar2(20),bbb number,ccc varchar2(20),ddd varchar2(10));insert into tt_30
    select 'name1',  350.00  ,'AC|dfcc|370',    'TS' from dual
    union 
    select 'name2',  552.21  ,'CC|decc|560',    'LS' from dual
    union
    select 'name3',  410.22  ,'F|bg|65',        'LZ' from dual;SQL>  select aaa,
      2   bbb,
      3   substr(ccc, st, decode(ed, 0, length(ccc), ed - st)) ccc,
      4   ddd
      5   from (select aaa,
      6   bbb,
      7   ccc,
      8   ddd,
      9   rn,
     10   decode(rn, 1, 1, instr(ccc, '|', 1, rn - 1) + 1) st,
     11   instr(ccc, '|', 1, rn) ed
     12   from (select *
     13   from tt_30,
     14   (select rownum rn
     15   from dual
     16   connect by rownum <=
     17   (select max(length(ccc)) -
     18   max(length(replace(ccc, '|', ''))) + 1
     19   from tt_30))))
     20   where ed > 0
     21   or st > 1
     22   order by aaa,rn;AAA                         BBB CCC                                      DDD
    -------------------- ---------- ---------------------------------------- -------
    name1                       350 AC                                       TS
    name1                       350 dfcc                                     TS
    name1                       350 370                                      TS
    name2                    552.21 CC                                       LS
    name2                    552.21 decc                                     LS
    name2                    552.21 560                                      LS
    name3                    410.22 F                                        LZ
    name3                    410.22 bg                                       LZ
    name3                    410.22 65                                       LZ已选择9行。
      

  2.   

    select 
    substr(ccc,1,instr(ccc,'|')-1) as ccc1/*第一部分*/,
    substr(substr(ccc,instr(ccc,'|')+1),1,instr(substr(ccc,instr(ccc,'|')+1),'|')-1) as ccc2/*第2部分*/
    from table1
     第3部分 你自已写吧。
      

  3.   

    主要是要讲清楚,ccc 字段的拆分规则
    不然只能局部解决你的问题
      

  4.   


    如果你这里用|分割的个数是固定的话,可以用2楼的这个方法。如果是不固定,就需要写个split的function了。2楼的connect by用的好强