Heim > Datenbank > MySQL-Tutorial > Wie konvertiere ich durch Kommas getrennte Werte in Zeilen in Oracle?

Wie konvertiere ich durch Kommas getrennte Werte in Zeilen in Oracle?

Susan Sarandon
Freigeben: 2025-01-22 18:52:11
Original
687 Leute haben es durchsucht

How to Convert Comma-Separated Values to Rows in Oracle?

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

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

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

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!

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