.PRJPRJ1.UNTUNT1.BLDBLD1.SYSSYS1.LVLLVL1.AREARE1.ILDILD1
以.分组,截取 
.PRJ   .UNT   .BLD   .SYS   .LVL   .ARE   .ILD  后面的字符
结果:
PRJ1   UNT1   BLD1   SYS1   LVL1   ARE1   ILD1
有没好的方法?

解决方案 »

  1.   

    SELECT LTRIM(REGEXP_REPLACE('.PRJPRJ1.UNTUNT1.BLDBLD1.SYSSYS1.LVLLVL1.AREARE1.ILDILD1',
                                '.[[:alpha:]]{3}',
                                '   '),
                 ' ')
      FROM DUAL;结果:
    1 PRJ1   UNT1   BLD1   SYS1   LVL1   ARE1   ILD1
      

  2.   


    把code以.拆分,值赋给不同的列,code  . 的个数不固定
      

  3.   

    1楼是不是理解错了lz的意思了,
    SELECT SUBSTR(TXT, 4) RESULT_TXT --INTO v1,v2,...
      FROM (SELECT REGEXP_SUBSTR(V_TXT, '[^\.]+', 1, LEVEL) TXT
              FROM DUAL
            CONNECT BY LEVEL <= REGEXP_COUNT(V_TXT, '\.') - 1
            );
      

  4.   

    regexp_count要11g才能用,lz如果不是11g,可以用substr,instr代替适当改变
      

  5.   


    我拆分code里的值,去和另一张表里的数据做匹配
      

  6.   

    要是列不固定,写着很麻烦了,还要用动态sql拼接。
    换个思路,转换成一列不同的行,然后用这列和其他表的不同列分别匹配with t1 as
     (select 'a,b,c' c1 from dual)
    select distinct regexp_substr(c1, '[^,]+', 1, level) c1 from t1 connect by level <= length(c1) - length(replace(c1, ',', '')) + 1