zoukankan      html  css  js  c++  java
  • 行转列

    9i下
    --多行
    with temp as
    (select '6001600301,6001600302,6001600303,6001600304' text from dual
    union
    select '7001600301,7001600302,7001600303' text from dual
    )
    select substr(text,instr(text,',',1,rn)+1,instr(text,',',1,rn+1)-instr(text,',',1,rn)-1) text from
    (
      select ','||t1.text||',' text,t2.rn from
       (select text,length(text)-length(replace(text,',',''))+1 rn from temp) t1,
       (select rownum rn from all_objects where rownum <= (select max(length(text)-length(replace(text,',',''))+1) rn from temp)) t2
      where t1.rn >= t2.rn order by text,rn
    )

    TEXT
    6001600301
    6001600302
    6001600303
    6001600304
    7001600301
    7001600302
    7001600303


    --单行
    with temp as
    (select '6001600301,6001600302,6001600303,6001600304' text from dual)
    select substr(text,instr(text,',',1,rn)+1,instr(text,',',1,rn+1)-instr(text,',',1,rn)-1) text from
    (
      select ','||t1.text||',' text,t2.rn from temp t1,
      (select rownum rn from all_objects where rownum <= (select length(text)-length(replace(text,',',''))+1 from temp)) t2
    )

    TEXT
    6001600301
    6001600302
    6001600303
    6001600304


    10G下
    --多行
    with temp as
    (select '6001600301,6001600302,6001600303,6001600304' text from dual
    union
    select '7001600301,7001600302,7001600303' text from dual
    )
    select regexp_substr(text,'[0-9]+',1,rn) text from
    (
      select t1.text,t2.rn from
       (select text,length(text)-length(replace(text,',',''))+1 rn from temp) t1,
       (select level rn from dual connect by rownum <= (select max(length(text)-length(replace(text,',',''))+1) rn from temp)) t2
      where t1.rn >= t2.rn order by text,rn
    )

    TEXT
    6001600301
    6001600302
    6001600303
    6001600304
    7001600301
    7001600302
    7001600303


    --单行
    with temp as
    (select '6001600301,6001600302,6001600303,6001600304' text from dual)
    select regexp_substr(text,'[0-9]+',1,rn) text from temp t1,
    (select level rn from dual connect by rownum <= (select length(text)-length(replace(text,',',''))+1 from temp)) t2

    TEXT
    6001600301
    6001600302
    6001600303
    6001600304
     




  • 相关阅读:
    学习数据结构基础
    epoll
    pthread_create
    设置套接字选项
    5中I/O模型
    数据仓库一些整理(列式数据库)
    mysql分区方案的研究
    订单表的分库分表方案设计(大数据)
    从源码角度理清memcache缓存服务
    性能,不是不重要,而是,它没有可维护性重要
  • 原文地址:https://www.cnblogs.com/djinmusic/p/4019506.html
Copyright © 2011-2022 走看看