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?

DDD
DDDOriginal
2025-01-22 19:11:09379Durchsuche

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

Konvertieren Sie durch Kommas getrennte Werte in Zeilen in Oracle

Komma ist ein gängiges Trennzeichen, um mehrere Werte als einzelne Zeichenfolge darzustellen. Wenn Sie jedoch mit Daten in Oracle arbeiten, müssen Sie diese Werte möglicherweise in verschiedene Zeilen aufteilen. Dies kann auf verschiedene Weise erreicht werden.

Rekursive Abfrage mit regulären Ausdrücken

Eine Möglichkeit besteht darin, eine rekursive Abfrage mit einem regulären Ausdruck zu verwenden, um jeden Wert zu extrahieren:

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

Diese Abfrage verwendet die Funktion REGEXP_SUBSTR, um jede Teilzeichenfolge ohne Komma zu extrahieren und verkettet dann die Ergebnisse mithilfe einer rekursiven Abfrage.

Rekursive Abfrage ohne reguläre Ausdrücke

Ein weiterer rekursiver Ansatz, der die Verwendung regulärer Ausdrücke vermeidet:

<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 Abfrage verwendet die INSTR-Funktion, um die Position des Kommas zu ermitteln, und verwendet dann die SUBSTR-Funktion, um die einzelnen Werte zu extrahieren.

CTE mit rekursiver Vereinigung

Die dritte Methode verwendet einen gemeinsamen Tabellenausdruck (CTE) mit einer rekursiven Vereinigung:

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

Diese Abfrage verwendet den UNION ALL-Operator, um einen rekursiven CTE zu erstellen, der alle Nicht-Komma-Teilzeichenfolgen extrahiert.

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!

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