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

Wie kann ich in Oracle durch Kommas getrennte Werte in Zeilen aufteilen?

DDD
DDDOriginal
2025-01-22 19:06:10633Durchsuche

How Can I Separate Comma-Delimited Values into Rows in Oracle?

Durch Kommas getrennte Daten in Oracle-Datenbanken umwandeln

Oracle-Datenbanken speichern Daten häufig als durch Kommas getrennte Werte in einer einzelnen Spalte, was eine effiziente Datenbearbeitung und -abfrage behindert. In diesem Artikel werden mehrere Methoden vorgestellt, um diese durch Kommas getrennten Daten effektiv in einzelne Zeilen umzuwandeln und so die Datenanalyse und -verarbeitung zu verbessern.

Methode 1: Rekursive Abfrage mit regulären Ausdrücken

Diese elegante Lösung verwendet eine rekursive Abfrage und reguläre Ausdrücke für eine effiziente Werteextraktion:

<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>

Die CONNECT BY-Klausel durchläuft die durch Kommas getrennten Werte, während REGEXP_SUBSTR jede Teilzeichenfolge extrahiert.

Methode 2: ANSI-konformer Ansatz mit CTE

Für eine verbesserte Portabilität bietet ein Common Table Expression (CTE) eine ANSI-kompatible Alternative:

<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.

Methode 3: Rekursiver Ansatz ohne reguläre Ausdrücke

Eine dritte Option vermeidet reguläre Ausdrücke und verlässt sich ausschließlich auf die Manipulation von Zeichenfolgen:

<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 nutzt die Funktion INSTR, um Kommapositionen zu finden und SUBSTR um die Werte zu extrahieren.

Diese Techniken bieten effiziente und zuverlässige Lösungen für die Umwandlung von durch Kommas getrennten Werten in Zeilen innerhalb einer Oracle-Datenbank und ermöglichen so eine verbesserte Datenverarbeitung und -analyse.

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

Stellungnahme:
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