Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine durch Kommas getrennte Zeichenfolge in Oracle 10g und 11g in mehrere Zeilen aufteilen?

Wie kann ich eine durch Kommas getrennte Zeichenfolge in Oracle 10g und 11g in mehrere Zeilen aufteilen?

Patricia Arquette
Freigeben: 2025-01-22 17:56:13
Original
715 Leute haben es durchsucht

How Can I Split a Comma-Delimited String into Multiple Rows in Oracle 10g and 11g?

Effizientes Aufteilen von durch Kommas getrennten Zeichenfolgen in Zeilen in Oracle 10g und 11g

Oracle bietet mehrere Methoden zum Aufteilen von durch Kommas getrennten Zeichenfolgen in einzelne Zeilen. Dieser verbesserte Ansatz nutzt reguläre Ausdrücke und die CONNECT BY-Klausel für eine effizientere Lösung:

WITH temp AS (
    SELECT 108 AS Name, 'test' AS Project, 'Err1, Err2, Err3' AS 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 <= LENGTH(REGEXP_REPLACE(t.error, '[^,]+')) + 1) AS OdciNumberList)) levels
Nach dem Login kopieren

Detaillierte Erklärung:

Diese Abfrage verwendet eine hierarchische Abfrage, um die Zeichenfolgenaufteilung zu erreichen. Lassen Sie uns die Schritte aufschlüsseln:

  1. Beispieldaten: Die WITH-Klausel definiert eine Beispieltabelle (temp), die durch Kommas getrennte Fehlerzeichenfolgen enthält.

  2. Trennzeichenanzahl: LENGTH(REGEXP_REPLACE(t.error, '[^,] ')) 1 berechnet die Anzahl der Kommas plus eins (um das letzte Element zu berücksichtigen). Dies bestimmt die Anzahl der benötigten Zeilen.

  3. Erzeugen der Sequenz: SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= ... generiert eine Zahlenfolge von 1 bis zur Anzahl der Elemente. CONNECT BY ist entscheidend für die Erstellung dieser Sequenz.

  4. Erstellung einer Sammlung: MULTISET(...) erstellt eine Sammlung (eine Reihe von Zahlen) aus der generierten Sequenz. CAST(... AS OdciNumberList) wandelt dies in einen Oracle-Sammlungstyp um.

  5. Tabellentransformation: TABLE(...) wandelt die Sammlung in eine Ergebnismenge um, die es uns ermöglicht, sie mit der temp Tabelle zu verbinden.

  6. String-Extraktion: REGEXP_SUBSTR(t.error, '[^,] ', 1, levels.column_value) extrahiert jeden durch Kommas getrennten Teilstring. [^,] ist ein regulärer Ausdruck, der einem oder mehreren Zeichen entspricht, die kein Komma sind. levels.column_value gibt die Vorkommensnummer für die Extraktion an.

  7. Trimmen und Deduplizieren: TRIM(...) entfernt führende/nachgestellte Leerzeichen. SELECT DISTINCT eliminiert doppelte Zeilen und stellt sicher, dass jeder Fehler nur einmal auftritt.

Dieser Ansatz ist effizient, da er Schleifen vermeidet und die integrierten Funktionen von Oracle für eine optimierte Leistung nutzt. Der reguläre Ausdruck bietet eine robuste Methode zum Umgang mit unterschiedlichen Zeichenfolgenlängen und potenziellen Unregelmäßigkeiten in den durch Kommas getrennten Daten.

Das obige ist der detaillierte Inhalt vonWie kann ich eine durch Kommas getrennte Zeichenfolge in Oracle 10g und 11g in mehrere Zeilen aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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