Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

SQL REGEXP_SUBSTR बंटवारे पर अशक्त स्ट्रिंग लौटाता है

बस REPLACE का उपयोग करें और आपका मानक कोड , . के साथ

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

या आपको डिलीमीटर की लंबाई से भाग देना होगा:

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

आप देख सकते हैं कि क्यों निष्पादित किया जा रहा है:

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

यह 7 लौटाएगा और आपका:

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

regexp_substr प्राप्त करने का प्रयास करेंगे 7 अवसरों के लिए जहां उनमें से 4 NULL होंगे और अंत में 4 NULL एक NULL में कुचल दिया जाएगा 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. जॉइन इश्यू:हल करने के लिए SQL स्टेटमेंट को ठीक करें:ORA-01799:एक कॉलम सबक्वेरी से बाहरी-जुड़ा नहीं हो सकता है

  2. SQL में विशेष वर्णों से बचना

  3. XMLAgg/XMLElement का उपयोग करते समय बफ़र बहुत छोटी त्रुटि

  4. ओरेकल मूविंग एवरेज

  5. SQL डेवलपर कनेक्शन दृश्य परिशोधित करें