有一个字符串,例如:a,ab,abc,e。 我想用一条SELECT语句,显示出下面的结果:
 a
 ab
 abc
 e
 请问下,该如何实现?谢谢了!

解决方案 »

  1.   

    你要的结果,是要在一个Column里面显示,还是显示分别不同的行。
      

  2.   


    --参考
    with tb as(
    select '11;22;3323;abc;ddd' id from dual)
    select
    substr(';'||id||';',instr(';'||id||';',';',1,rownum)+1,
            instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum)-1) newid,
    instr(';'||id||';',';',1,rownum)col1,  --';'rownum次出现的位置
    instr(';'||id||';',';',1,rownum+1)col2, --';'rownum+1次出现的位置
    instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum) col3 --要截取的长度
    from tb
    connect by rownum <= length(';'||id||';')
         - length(replace(';'||id||';', ';', ''))-1
      

  3.   


    with t as(
    select ',a,ab,abc,e,' str from dual
    )
    select substr(str,
                  instr(str, ',', 1, rn) + 1,
                  instr(str, ',', 1, rn + 1) - instr(str, ',', 1, rn) - 1)
      from t,
           (select rownum rn
              from (select length(str) - length(replace(str, ',', '')) - 1 l
                      from t) whrere
            connect by rownum < l) t1a
    ab
    abc
    e
      

  4.   


    --二楼的不错,更简洁高效with t as(
    select ',a,ab,abc,e,' str from dual
    )
    select substr(str,
                  instr(str, ',', 1, rownum) + 1,
                  instr(str, ',', 1, rownum + 1) - instr(str, ',', 1, rownum) - 1)
      from t connect by rownum<length(str) - length(replace(str, ',', '')) - 1
    a
    ab
    abc
    e