select '网站,短信,广告' from dual这种查询出来就是 网站,短信,广告
能不能把结果集变成
网站
短信
广告 三列呢?可能 select '网站,短信,广告' from dual 会变化 需要把 '网站,短信,广告' 看成一个变量。
求实现方案,谢谢

解决方案 »

  1.   


    --10g以上,使用正则表达式
    SQL> with t as(
      2       select '网站,短信,广告信息' ad from dual)
      3   select regexp_substr(ad,'[^,]+',1,level) ad
      4     from t
      5  connect by
      6          level<=length(ad)-length(replace(ad,',',''))+1
      7  /
     
    AD
    --------------------
    网站
    短信
    广告信息
      

  2.   


    --10以下也使用
    SQL> with t as(
      2       select '网站,短信,广告' s from dual)
      3  select substr(s,
      4         instr(s,',',1,level)+1,
      5         instr(s,',',1,level+1)-
      6         instr(s,',',1,level)-1) str
      7  from (select ','||s||',' s from t)
      8  connect by level
      9             <length(s)-length(replace(s,','))
     10  /
     
    STR
    --------------------
    网站
    短信
    广告
      

  3.   

    这里在定义一个fn_split  管道函数处理比较方便。