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

Pisahkan String dengan posisi pembatas menggunakan Oracle

Jika Anda hanya memiliki satu string dan Anda tahu itu selalu memiliki tepat empat bagian, Anda dapat membaginya seperti ini, hanya menggunakan fungsi string standar (dan menghindari ekspresi reguler, yang lebih fleksibel tetapi seringkali lebih lambat).

CATATAN :Bagian kedua dari jawaban ini membahas string dengan jumlah variabel "bagian".

with inputs ( str ) as (
       select ',,defoifcd,87765' from dual
     )
-- end of TEST data; SQL query begins below (use your actual table and column names)
select substr(str, 1, instr(str, ',') - 1) as part_1,
       substr(str, instr(str, ',') + 1, 
              instr(str, ',', 1, 2) - instr(str, ',') - 1) as part_2,
       substr(str, instr(str, ',', 1, 2) + 1, 
              instr(str, ',', 1, 3) - instr(str, ',', 1, 2) - 1) as part_3,
       substr(str, instr(str, ',', -1) + 1) as part_4
from   inputs;

PART_1   PART_2   PART_3   PART_4
-------- -------- -------- --------
                  defoifcd 87765

1 row selected.

Jika jumlah bagian tidak diketahui sebelumnya, lebih baik untuk mendapatkan output dalam format yang berbeda (lihat output di bawah). Jika seseorang perlu mengatur bagian-bagian dalam kolom yang dapat dilakukan setelah semua pemrosesan lainnya selesai - dan selalu lebih baik diserahkan kepada aplikasi pelaporan daripada dilakukan dalam SQL.

with inputs ( id, str ) as (
       select 1, ',,defoifcd,87765' from dual union all
       select 2, ''                 from dual union all
       select 3, 'a, b, c'          from dual
     )
-- end of TEST data; SQL query begins below (use your actual table and column names)
select id, str, level as part_number,
       substr(aug_str, instr(aug_str, ',', 1, level) + 1,
              instr(aug_str, ',', 1, level + 1) - instr(aug_str, ',', 1, level) - 1) as val
from   ( select id, str, ',' || str || ',' as aug_str from inputs)
connect by level <= length(str) - length(translate(str, 'z,', 'z')) + 1
       and prior id = id
       and prior sys_guid() is not null
;

ID STR              PART_NUMBER VAL
-- ---------------- ----------- ----------
 1 ,,defoifcd,87765           1
 1 ,,defoifcd,87765           2
 1 ,,defoifcd,87765           3 defoifcd
 1 ,,defoifcd,87765           4 87765
 2                            1
 3 a, b, c                    1 a
 3 a, b, c                    2  b
 3 a, b, c                    3  c

8 rows selected.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migrasi dari Java 1.4, EJB 1 ke Java 6 dan EJB 3

  2. Masalah dengan pengelompokan

  3. Bagaimana cara membuat nama tabel Oracle tidak peka huruf besar-kecil?

  4. Panggil prosedur tersimpan Oracle dengan parameter output kursor dari skrip python

  5. MVC4 Entity Framework banyak-ke-banyak kustom bergabung nama tabel dan nama skema