Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

SQL REGEXP_SUBSTR trả về chuỗi null khi tách

Chỉ cần sử dụng REPLACE và mã chuẩn của bạn với ,

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

Hoặc bạn cần chia cho chiều dài của mêtích:

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

Bạn có thể thấy lý do tại sao thực thi:

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

Điều này sẽ trả về 7 và của bạn:

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

sẽ cố gắng lấy regexp_substr cho 7 lần xuất hiện trong đó 4 lần trong số đó sẽ là NULL và cuối cùng là 4 NULL sẽ được thu gọn thành một NULL bởi 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. Viết truy vấn SQL để tìm sinh viên đăng ký các đơn vị được cung cấp ở một địa điểm?

  2. Hiển thị mức sử dụng CPU oracle cho các phiên dưới dạng phần trăm

  3. Không có ánh xạ phương ngữ cho loại JDBC:-9

  4. Cách gọi một hàm với tham số Rowtype từ một câu lệnh select trong Oracle

  5. Tôi nên lưu trữ GUID trong Oracle như thế nào?