In Oracle können Sie eine durch Kommas getrennte Zeichenfolge mithilfe einer Kombination aus regulären Ausdrücken und hierarchischen Abfragen in mehrere Zeilen aufteilen. Hier ist eine vollständige Anleitung, wie Sie dies erreichen:
Problemstellung:
Angenommen, es gibt eine Tabelle mit der folgenden Struktur:
<code>名称 | 项目 | 错误 -------------- 108 | test | Err1, Err2, Err3 109 | test2 | Err1</code>
Sie möchten die Spalte „Fehler“ in mehrere Zeilen umwandeln, das Ergebnis ist wie folgt:
<code>名称 | 项目 | 错误 -------------- 108 | test | Err1 108 | test | Err2 108 | test | Err3 109 | test2 | Err1</code>
Lösung:
<code class="language-sql">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(t.error, '[^,]+', 1, levels.column_value)) as error from temp t, table(cast(multiset(select level from dual connect by level <= regexp_count(t.error, ',')) as OdciNumberList)) levels ;</code>
Anleitung:
select level from dual connect by level <= regexp_count(t.error, ',')
generiert eine Folge von Zahlen, deren Länge der Anzahl der Kommas in der Zeichenfolge plus eins (d. h. der Anzahl der Fehler) entspricht. table()
und cast()
konvertieren eine hierarchische Abfrage in eine Sammlung numerischer Listen und dann in eine Tabelle. Dadurch werden Zeilen mit steigenden Nummern erzeugt, die jeder Zeile in der TEMP-Tabelle entsprechen. regexp_substr()
wird verwendet, um einen einzelnen Fehlerwert basierend auf der Zahl aus dem vorherigen Schritt zu extrahieren. Die trim()
-Funktion entfernt alle führenden oder nachgestellten Leerzeichen. Hinweis: Diese Lösung verwendet den Typ OdciNumberList und erfordert möglicherweise die Angabe von Kompatibilitätseinstellungen, wenn Sie eine Oracle-Version vor 12c verwenden.
Das obige ist der detaillierte Inhalt vonWie teile ich durch Kommas getrennte Zeichenfolgen in Oracle in mehrere Zeilen auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!