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

SQL REGEXP_SUBSTR mengembalikan String nol saat membelah

Cukup gunakan REPLACE dan kode standar Anda dengan ,

SqlFiddleDemo

 with temp as
(
    select 108 Name, 'test' Project, 'Err1:::Err2:::Err3' Error  from dual
    union all
    select 109, 'test2', 'Err1' from dual
)
select distinct
  t.name, t.project,
  trim(regexp_substr(REPLACE(t.error, ':::', ', '), '[^,]+', 1, levels.column_value))  as error
from 
  temp t,
  table(cast(multiset(select level from dual connect by  level <= length (regexp_replace(REPLACE(t.error, ':::', ', '), '[^,]+'))  + 1) as sys.OdciNumberList)) levels
order by name

Atau Anda perlu membagi dengan panjang pembatas:

SqlFiddle

with temp as
(
    select 108 Name, 'test' Project, 'Err1:::Err2:::Err3' Error  from dual
    union all
    select 109, 'test2', 'Err1:::Err2' from dual
)
select distinct
  t.name, t.project,
  trim(regexp_substr(t.error, '[^:::]+', 1, levels.column_value))  as error
from 
  temp t,
  table(cast(multiset(select level from dual connect by  level <= length (
       regexp_replace(t.error, '[^:::]+'))/3  + 1) as sys.OdciNumberList)) levels
order by name

Anda dapat melihat mengapa mengeksekusi:

SELECT length (regexp_replace('Err1:::Err2:::Err3', '[^:::]+')) + 1 AS l
FROM dual

Ini akan mengembalikan 7 dan:

. Anda
SELECT DISTINCT  t.name, t.project,
trim(regexp_substr(t.error, '[^:::]+', 1, levels.column_value))  as error

akan mencoba untuk mendapatkan regexp_substr untuk 7 kejadian di mana 4 di antaranya adalah NULL dan pada akhirnya 4 NULL akan terjepit menjadi satu NULL oleh DISTINCT .




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

  2. Ubah kata sandi pengguna melalui jdbc. Masalah dengan pass yang mengandung tanda tanya

  3. orakel | hapus catatan duplikat

  4. Cara menggunakan parameter SQL dalam potongan SQL markdown R

  5. VARIABEL BIND PL/SQL untuk Perhitungan Volume Prisma Persegi Panjang