Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara memilih nilai dalam kolom

Berdasarkan solusi dengan regexp split Anda dapat menjalankan kueri berikut.

Namun perhatikan, bahwa Anda harus mengetahui jumlah maksimal kolom yang dihasilkan terlebih dahulu.

 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;

Ini memberi Anda tampilan baris, kolom, dan kunci:

    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  

Anda dapat menggunakan kueri PIVOT untuk mendapatkan hasilnya dalam tabel datar

 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  

Sekali lagi, seperti yang Anda lihat, Anda harus membuat daftar semua kolom yang dihasilkan dalam kueri.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cari database Oracle untuk tabel dengan nama kolom tertentu?

  2. Menjaga Propagasi Selalu Diaktifkan Di Oracle Streams

  3. Oracle outer join dengan kondisi filter pada tabel kedua

  4. Menghitung perbedaan antara dua cap waktu di Oracle dalam milidetik

  5. Oracle pilih untuk perilaku pembaruan