Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách chọn các giá trị trong một cột

Dựa trên giải pháp với regexp split bạn có thể chạy truy vấn sau.

Tuy nhiên, lưu ý rằng bạn phải biết trước số lượng tối đa của các cột kết quả.

 with t1 as (select 1 rn, 'Orcl, orcl, linux box, Pass, tablespace_name1, tablespace_name2' col from dual union all
              select 2 rn, 'Orcl2, orcl2, linux box2, Pass2, tablespace_name12, tablespace_name22' col from dual),
      t2 as (select  rownum colnum from dual connect by level <= 6 /* (max) number of columns */)
 select t1.rn, t2.colnum, rtrim(ltrim(regexp_substr(t1.col,'[^,]+', 1, t2.colnum)))  col  from t1, t2 
 where regexp_substr(t1.col, '[^,]+', 1, t2.colnum) is not null
 order by rn,colnum;

Điều này cung cấp cho bạn chế độ xem hàng, cột và khóa:

    RN     COLNUM COL                                                                 
 ----- ---------- ------------------ 
     1          1 Orcl                                                                  
     1          2 orcl                                                                  
     1          3 linux box                                                             
     1          4 Pass                                                                  
     1          5 tablespace_name1                                                      
     1          6 tablespace_name2                                                      
     2          1 Orcl2                                                                 
     2          2 orcl2                                                                 
     2          3 linux box2                                                            
     2          4 Pass2                                                                 
     2          5 tablespace_name12                                                     
     2          6 tablespace_name22  

Bạn có thể sử dụng truy vấn PIVOT để lấy kết quả trong bảng phẳng

 with t1 as (select 1 rn, 'Orcl, orcl, linux box, Pass, tablespace_name1, tablespace_name2' col from dual union all
              select 2 rn, 'Orcl2, orcl2, linux box2, Pass2, tablespace_name12, tablespace_name22' col from dual),
      t2 as (select  rownum colnum from dual connect by level <= 6 /* (max) number of columns */),
      t3 as (select t1.rn, t2.colnum, rtrim(ltrim(regexp_substr(t1.col,'[^,]+', 1, t2.colnum)))  col  from t1, t2 
      where regexp_substr(t1.col, '[^,]+', 1, t2.colnum) is not null)
 select * from t3
 PIVOT (max(col) col  for (colnum) in 
 (1 as "1",
  2 as "2",
  3 as "3",
  4 as "4",
  5 as "5",
  6 as "6"))
 order by rn;


    RN 1_COL     2_COL     3_COL     4_COL     5_COL              6_COL   
 ----- --------- --------- --------- --------- ---------          ---------
     1 Orcl      orcl      linux box Pass      tablespace_name1   tablespace_name2 
     2 Orcl2     orcl2     linux box2Pass2     tablespace_name12  tablespace_name22  

Một lần nữa, như bạn thấy, bạn phải liệt kê tất cả các cột kết quả trong truy vấn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CẬP NHẬT với cú pháp THAM GIA cho Cơ sở dữ liệu Oracle

  2. truyền mảng số nguyên cho thủ tục oracle bằng c #

  3. Chỉ mục Oracle DATE

  4. Vấn đề loại ký tự Oracle trong truy vấn HQL Hibernate

  5. Nối một cột theo một nhóm trong R