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

Cara Memisahkan String di Oracle

Masalah:

Anda ingin membagi string di Oracle.

Contoh:

Anda memiliki sebuah kalimat, dan Anda ingin membaginya dengan karakter spasi.

Solusi:

SELECT
REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) AS parts
FROM dual
CONNECT BY REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) IS NOT NULL;

Tabel hasil terlihat seperti ini:

bagian
Sebuah
contoh
kalimat.

Diskusi:

Untuk mendapatkan substring dari string, Anda dapat menggunakan fungsi REGEXP_SUBSTR() bawaan Oracle. Dibutuhkan empat argumen:

  • String yang akan dicari substringnya.
  • Ekspresi reguler; yaitu, pola yang ingin Anda temukan.
  • Posisi di mana Anda ingin mulai mencari pola (nilai defaultnya adalah 1, yang berarti dimulai dari awal string).
  • Angka yang menentukan kemunculan substring yang cocok yang ingin Anda lihat (nilai defaultnya adalah 1 , yang berarti substring pertama yang cocok harus ditampilkan).

Dalam contoh kita, string yang akan dicari adalah 'An example sentence. ' Dalam string, Anda mencari substring yang berupa kata, yang kami definisikan di sini sebagai grup karakter apa pun kecuali spasi. Inilah mengapa kami menentukan pola '[^ ]+ ', yaitu, urutan karakter non-spasi apa pun. [^ ] singkatan dari karakter apa pun kecuali spasi, dan + tanda berarti satu atau lebih kemunculan karakter tersebut. Argumen ketiga harus menjadi default (1 ), karena Anda ingin mencari kata di seluruh string dari awal. Argumen terakhir adalah yang paling sulit – Anda perlu mengubah nilainya untuk setiap string yang akan dicari. Itu harus level – kolom semu yang tersedia dalam kueri hierarkis menggunakan CONNECT BY – yang, dalam kasus kami, akan sama dengan nomor baris dari baris saat ini dalam hasil ketika CONNECT BY digunakan. Jadi, Anda memiliki:

REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level)

Ekspresi ini harus dipilih dari dual – tabel semu yang digunakan di Oracle saat Anda tidak memilih dari tabel yang sebenarnya. Kemudian, Anda harus CONNECT BY operator kueri hierarkis, dengan syarat bahwa substring yang diambil tidak boleh NULL . Substring yang diambil akan menjadi NULL setelah semua kata diambil; kueri hierarkis kemudian akan menghentikan eksekusi. Jadi, Anda memiliki:

FROM dual CONNECT BY REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) IS NOT NULL

Anda dapat membaca di sini tentang level dan CONNECT BY.

Jika Anda ingin memisahkan string dengan pembatas lain, Anda dapat dengan mudah mengubah kueri. Misalnya, jika Anda ingin memisahkan string dengan koma, ubah '[^ ] +' ke '[^,]+ '. Berikut ini contoh kueri:

SELECT REGEXP_SUBSTR('Johnson,Blair,Black,Newman,Henderson', '[^,]+', 1, level) AS parts
FROM dual CONNECT BY REGEXP_SUBSTR('Johnson,Blair,Black,Newman,Henderson', '[^,]+', 1, level) IS NOT NULL;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengurai untuk Oracle SQL

  2. Buat Ulang Node RAC Buruk

  3. Cara mengkonfigurasi Server Glassfish di Eclipse secara manual

  4. Apakah perlu membuang DbCommand setelah digunakan?

  5. R12.2 Ringkasan siklus penambalan online