Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:sql_regular_expression

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
prog:sql_regular_expression [2022/11/08 17:05] – [RegEx und ein Outer Join mit der (+) Syntax] gpipperrprog:sql_regular_expression [2022/11/08 17:19] (aktuell) – [RegEx und ein Outer Join mit der (+) Syntax] gpipperr
Zeile 449: Zeile 449:
 === String in Elemente zerlegen === === String in Elemente zerlegen ===
  
-In einer Log Tabelle sind Bestimmte Informationen in einer Liste aufgeführt die mit | getrennt ist.+In einer Log Tabelle sind in einer Spalte bestimmte Informationen in einer Liste aufgeführtdie mit | getrennt ist.
  
 Wie: " Column1:ValueA | Column2:ValueB | Column3:ValueC | Column4:ValueD | Column4:ValueE | " Wie: " Column1:ValueA | Column2:ValueB | Column3:ValueC | Column4:ValueD | Column4:ValueE | "
  
-Ziel ist es Value von Column3  zu extrahieren, wir brauchen alles zwischen den "|" und dann den dritten Match:+Ziel ist es den Wert von Column3 zu extrahieren, wir brauchen also alles jeweils zwischen den "|" und dann den dritten Match:
  
 <code sql> <code sql>
-  with data ( select 'Column1:ValueA | Column2:ValueB | Column3:ValueC | Column4:ValueD | Column4:ValueE |' from dual;+with data as  
 +   select 'Column1:ValueA | Column2:ValueB | Column3:ValueC | Column4:ValueD | Column4:ValueE |'  as log_val  
 +      from dual
   )   )
- select  from data;+select ltrim( 
 +           trim( 
 +             regexp_substr(  
 +                 regexp_substr( a.log_val,'[^|]+',1,3) 
 +               ,'[:].+ ',1,
 +            ) 
 +          ),':'
 +        as Column3 
 +from  data a 
  
-----+Column3 
 +-------- 
 + 
 +ValueC     
  
 </code> </code>
  
 +Der Trick dahinter ist es den String zu zerlegen mit Matches für eine Zeichenkette OHNE den "|" und den "3" Match herauszufiltern, diesen Teilstring dann bei ":" zu trennen und dann mit Trimmen dafür sorgen das Leerzeichen und das ":" verschwinden.
 +
 +Alle in einer Spalte darstellen:
 +
 +<code sql>
 +WITH DATA AS ( 
 +   SELECT 'Column1:ValueA | Column2:ValueB | Column3:ValueC | Column4:ValueD | Column5:ValueE |'  AS log_val 
 +      FROM dual
 +  )
 +  SELECT trim(
 +               regexp_substr(a.log_val, '[^|]+', 1, level)
 +        ) as columValues
 +   FROM DATA a 
 +  CONNECT BY level<regexp_count(a.log_val,'[^|]+')+1;
 +  
 +columValues
 +----------
 +Column1:ValueA
 +Column2:ValueB
 +Column3:ValueC
 +Column4:ValueD
 +Column5:ValueE  
 +
 +</code>
  
 ---- ----
prog/sql_regular_expression.txt · Zuletzt geändert: 2022/11/08 17:19 von gpipperr