Heim >Datenbank >MySQL-Tutorial >Wie kann ich in Oracle durch Kommas getrennte Werte in Zeilen aufteilen?
Durch Kommas getrennte Daten in Oracle-Datenbanken umwandeln
Oracle-Datenbanken speichern Daten häufig als durch Kommas getrennte Werte in einer einzelnen Spalte, was eine effiziente Datenbearbeitung und -abfrage behindert. In diesem Artikel werden mehrere Methoden vorgestellt, um diese durch Kommas getrennten Daten effektiv in einzelne Zeilen umzuwandeln und so die Datenanalyse und -verarbeitung zu verbessern.
Methode 1: Rekursive Abfrage mit regulären Ausdrücken
Diese elegante Lösung verwendet eine rekursive Abfrage und reguläre Ausdrücke für eine effiziente Werteextraktion:
<code class="language-sql">select distinct id, trim(regexp_substr(value,'[^,]+', 1, level) ) value, level from tbl1 connect by regexp_substr(value, '[^,]+', 1, level) is not null order by id, level;</code>
Die CONNECT BY
-Klausel durchläuft die durch Kommas getrennten Werte, während REGEXP_SUBSTR
jede Teilzeichenfolge extrahiert.
Methode 2: ANSI-konformer Ansatz mit CTE
Für eine verbesserte Portabilität bietet ein Common Table Expression (CTE) eine ANSI-kompatible Alternative:
<code class="language-sql">with t (id,res,val,lev) as ( select id, trim(regexp_substr(value,'[^,]+', 1, 1 )) res, value as val, 1 as lev from tbl1 where regexp_substr(value, '[^,]+', 1, 1) is not null union all select id, trim(regexp_substr(val,'[^,]+', 1, lev+1) ) res, val, lev+1 as lev from t where regexp_substr(val, '[^,]+', 1, lev+1) is not null ) select id, res,lev from t order by id, lev;</code>
Dieser rekursive CTE erzielt das gleiche Ergebnis wie die vorherige Methode.
Methode 3: Rekursiver Ansatz ohne reguläre Ausdrücke
Eine dritte Option vermeidet reguläre Ausdrücke und verlässt sich ausschließlich auf die Manipulation von Zeichenfolgen:
<code class="language-sql">WITH t ( id, value, start_pos, end_pos ) AS ( SELECT id, value, 1, INSTR( value, ',' ) FROM tbl1 UNION ALL SELECT id, value, end_pos + 1, INSTR( value, ',', end_pos + 1 ) FROM t WHERE end_pos > 0 ) SELECT id, SUBSTR( value, start_pos, DECODE( end_pos, 0, LENGTH( value ) + 1, end_pos ) - start_pos ) AS value FROM t ORDER BY id, start_pos;</code>
Diese Methode nutzt die Funktion INSTR
, um Kommapositionen zu finden und SUBSTR
um die Werte zu extrahieren.
Diese Techniken bieten effiziente und zuverlässige Lösungen für die Umwandlung von durch Kommas getrennten Werten in Zeilen innerhalb einer Oracle-Datenbank und ermöglichen so eine verbesserte Datenverarbeitung und -analyse.
Das obige ist der detaillierte Inhalt vonWie kann ich in Oracle durch Kommas getrennte Werte in Zeilen aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!