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

Ubah string yang dibatasi menjadi baris di Oracle

Riffing metode ini untuk memisahkan string sambil mengizinkan null:

select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, level, null, 1) from dual
connect by level < regexp_count('A~^B~^C~D^E','(.*?)(~\^|$)');

REGEXP_SUBS
-----------
A
B
C~D^E

Seperti pada jawaban tertaut, ia mencari karakter apa pun, tidak serakah, diikuti oleh kombinasi ~^ (dengan tanda sisipan lolos, jadi ~\^ ) atau akhir baris. regexp_substr() panggilan juga menggunakan argumen opsional untuk menentukan subexpr - jadi hanya mendapat pengelompokan pertama (.*? ) dan bukan pembatas itu sendiri, yang ada di pengelompokan kedua.

Jika Anda menginginkan elemen tertentu maka itu lebih dekat ke pos tertaut:

select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;

REGEX
-----
C~D^E

Atau saat Anda melakukan ini dalam prosedur, gunakan kueri sambungkan untuk mengisi koleksi, lalu pilih elemen yang Anda butuhkan, jika Anda akan melihat lebih dari satu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Atur Ulang Urutan di oracle 11g

  2. Mengapa urutan sortir varchar Oracle tidak cocok dengan perilaku perbandingan varchar?

  3. hubungkan dengan klausa di regex_substr

  4. Oracle Insert via Select dari beberapa tabel di mana satu tabel mungkin tidak memiliki baris

  5. Mengapa saya tidak dapat menggunakan variabel bind dalam pernyataan DDL/SCL dalam SQL dinamis?