RT
如:得到一个oracle数组number(12,33,44,55),怎么将其转成查询结果,如下:
ndata
12
33
44
55

解决方案 »

  1.   

    不知道可不可以建一个number表,有个ndata列,然后将数组number(12,33,44,55)的值一个个赋给number表的ndata列呢?我是个新人,回答的不好望lz不要介意撒,呵呵!!!
      

  2.   

    select regexp_substr('1001,1002,1003,1004,1005', '[^,]+', 1, level) as r from dual
    connect by level <= 5R                        
    ------------------------ 
    1001                     
    1002                     
    1003                     
    1004                     
    1005  
      

  3.   

    这种写法能不能应用到某个字段上,如:
    select regexp_substr(managerole, '[^,]+', 1, level) from contracttype;
    managerole是一个逗号分割的字符串。
    我这么写提示我缺少connect by 关键字,不知道换种写法是否可以。
      

  4.   

    with t1 as (
    select '1001,1002,1003,1004,1005' as c2 from dual
    union all
    select '101,102,103,104,105' from dual
    )
    select 
      substr(','||c2||',',instr(','||c2,',',1,b.rn)+1,
      instr(c2||',',',',1,b.rn)-instr(','||c2,',',1,b.rn)) as c2
    from t1,
      (select rownum rn from t1
      connect by rownum<10) b
      where length(c2)-length(replace(c2,','))+1>=b.rn
    order by b.rn
    --结果
    C2                         
    -------------------------- 
    101                        
    1001                       
    102                        
    1002                       
    103                        
    1003                       
    104                        
    1004                       
    105                        
    1005   
      

  5.   

    改进方法:WITH t1 AS
      ( SELECT '1001,1002,1003,1004,1005' AS c2 FROM dual
      UNION ALL
      SELECT '101,102,103,1041,1051' FROM dual
      )
    SELECT substr(',' || c2 || ',',--前后补分割符,
      instr(',' || c2 || ',',',',1,b.rn) + 1,--取第rn个分割符的位置+1
      instr(',' || c2 || ',',',',1,b.rn + 1) - instr(',' || c2 || ',',',',1,b.rn) - 1 --取截取的长度 = 第rn+1个位置-第rn个位置
      ) AS c2
    FROM t1,
      (SELECT rownum rn FROM t1 connect BY rownum<10
      ) b
    where LENGTH(c2)-LENGTH(REPLACE(c2,','))+1 >= b.rn
    ORDER BY b.rn
    --result
    C2                         
    -------------------------- 
    101                        
    1001                       
    102                        
    1002                       
    103                        
    1003                       
    1041                       
    1004                       
    1051                       
    1005                       
      

  6.   

    用数组下标呢
    number(1) , number(2) ...