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

Cara mengambil beberapa string kecocokan menggunakan ekspresi reguler

Jika Anda ingin semua ini sebagai string tunggal dalam baris mereka tidak perlu menggunakan ekspresi reguler Anda dapat menggunakan standar REPLACE() :

SQL> select replace('2711393|2711441|1234567', '|', ', ') from dual;

REPLACE('2711393|2711441|
-------------------------
2711393, 2711441, 1234567

Jika Anda ingin semua ini dalam satu kolom maka Anda perlu menggunakan CONNECT BY seperti yang saya tunjukkan di sini . Harap dicatat bahwa ini sangat tidak efisien.

SQL>  select regexp_substr('2711393|2711441|1234567', '[^|]+', 1, level)
  2     from dual
  3  connect by regexp_substr('2711393|2711441|1234567'
  4                           , '[^|]+', 1, level) is not null;

REGEXP_SUBSTR('2711393|2711441|1234567','[^|]+',1,LEVEL)
--------------------------------------------------------------------------

2711393
2711441
1234567

SQL>

Jika Anda ingin ini di kolom yang berbeda, Anda perlu menggunakan PIVOT dan Anda harus tahu berapa banyak yang Anda miliki. Saya berasumsi 3.

SQL> select *
  2    from (
  3   select regexp_substr('2711393|2711441|1234567', '[^|]+', 1, level) as a
  4        , level as lvl
  5     from dual
  6  connect by regexp_substr('2711393|2711441|1234567'
  7                           , '[^|]+', 1, level) is not null
  8          )
  9   pivot ( max(a)
 10          for lvl in (1,2,3)
 11          )
 12         ;

1          2          3
---------- ---------- ----------
2711393    2711441    1234567

SQL>

Seperti yang Anda lihat, ini semua benar-benar mengerikan dan, kecuali yang pertama, sangat tidak efisien. Anda harus menormalkan database dengan benar untuk memastikan Anda tidak perlu melakukan ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OracleCommandBuilder.DeriveParameters() melempar OracleException:ORA-06564:objek tidak ada ORA-06512:di SYS.DBMS_UTILITY

  2. Kunci Unik di Oracle dengan Contoh

  3. Menggunakan berbeda dalam XMLAGG pada menduplikasi catatan

  4. Perbandingan Waktu Oracle

  5. Oracle:DDL dan pengembalian transaksi