Heim > Datenbank > MySQL-Tutorial > Wie teile ich durch Kommas getrennte Zeichenfolgen in Oracle in mehrere Zeilen auf?

Wie teile ich durch Kommas getrennte Zeichenfolgen in Oracle in mehrere Zeilen auf?

Susan Sarandon
Freigeben: 2025-01-22 17:51:12
Original
508 Leute haben es durchsucht

How to Split Comma-Separated Strings into Multiple Rows in Oracle?

Komma-getrennte Zeichenfolge in Oracle in mehrere Zeilen aufteilen

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Anleitung:

  1. Temporäre Tabelle erstellen: TEMP-Tabelle erstellen, um die Beispieldaten zu speichern.
  2. Verwenden Sie eine hierarchische Abfrage: Die Unterabfrage 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.
  3. Umwandlungen und Tabellen: Die Funktionen 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.
  4. Fehlerwert extrahieren: Die Funktion 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.
  5. Verbinden und auswählen: Die Hauptabfrage verknüpft die TEMP-Tabelle mit der in Schritt 4 erstellten Tabelle und wählt die entsprechenden Spalten aus: Name, Projekt und Fehler.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage