Transformation von durch Kommas getrennten Daten in Oracle-Datenbanken
Viele Datenbearbeitungsaufgaben erfordern zur einfacheren Analyse die Konvertierung kommagetrennter Werte (CSV) innerhalb einer einzelnen Spalte in einzelne Zeilen. Oracle bietet mehrere Ansätze, um dies zu erreichen.
Methode 1: Rekursives SQL mit regulären Ausdrücken
Diese Technik verwendet rekursive SQL-Abfragen in Kombination mit regulären Ausdrücken für eine effiziente CSV-Aufteilung:
<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>
Diese Abfrage extrahiert iterativ jeden durch Kommas getrennten Wert, generiert für jeden eine neue Zeile und enthält einen Ebenenindikator.
Methode 2: Rekursives SQL (CTE) ohne reguläre Ausdrücke
Ein eher standardmäßiger SQL-Ansatz verwendet einen Common Table Expression (CTE):
<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, vermeidet jedoch die Abhängigkeit von regulären Ausdrücken.
Methode 3: Nicht-rekursiver Ansatz (INSTR und SUBSTR)
Eine nicht rekursive Alternative verwendet die Funktionen INSTR()
und SUBSTR()
, um Werte zu finden und zu extrahieren:
<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 findet iterativ Kommapositionen und extrahiert Teilzeichenfolgen und bietet so einen anderen Ansatz für das Problem.
Die optimale Methode hängt von Ihren spezifischen Daten- und Leistungsanforderungen ab. Erwägen Sie, jeden Ansatz zu testen, um die effizienteste Lösung für Ihre Oracle-Umgebung zu ermitteln.
Das obige ist der detaillierte Inhalt vonWie konvertiere ich durch Kommas getrennte Werte in Zeilen in Oracle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!