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

Wie kann ich durch Kommas getrennte Werte in Oracle SQL effizient in Zeilen konvertieren?

Susan Sarandon
Freigeben: 2025-01-22 18:57:10
Original
595 Leute haben es durchsucht

How Can I Efficiently Convert Comma-Separated Values into Rows in Oracle SQL?

Komma-getrennte Wertekonvertierungsstrategie in Oracle SQL

Das Organisieren von Daten in Datenbankdatensätzen als durch Kommas getrennte Werte führt zu Herausforderungen bei der Suche nach einer tabellarischen Darstellung. In diesem Artikel werden verschiedene SQL-Techniken zum effizienten Konvertieren solcher Daten in Zeilen für eine einfache Datenextraktion und -bearbeitung untersucht.

Problem: Durch Kommas getrennte Werte in Datenbankdatensätzen

Betrachten Sie die folgende Tabellenstruktur, bei der die Wertespalte durch Kommas getrennte Werte enthält:

<code>CREATE TABLE tbl1 (
  id NUMBER,
  value VARCHAR2(50)
);

INSERT INTO tbl1 VALUES (1, 'AA, UT, BT, SK, SX');
INSERT INTO tbl1 VALUES (2, 'AA, UT, SX');
INSERT INTO tbl1 VALUES (3, 'UT, SK, SX, ZF');</code>
Nach dem Login kopieren

Das Ziel besteht darin, diese Daten in ein Tabellenformat umzuwandeln, wobei jeder Wert in einer eigenen Zeile getrennt ist:

<code>ID | VALUE
-------------
1  | AA
1  | UT
1  | BT
1  | SK
1  | SX
2  | AA
2  | UT
2  | SX
3  | UT
3  | SK
3  | SX
3  | ZF</code>
Nach dem Login kopieren

Methode 1: Verwenden Sie REGEXP_SUBSTR und Connect By

Eine Möglichkeit besteht darin, die REGEXP_SUBSTR- und CONNECT BY-Klausel von Oracle zu nutzen:

<code>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 Methode verwendet einen regulären Ausdruck (REGEXP_SUBSTR), um jede Teilzeichenfolge zu extrahieren, während CONNECT BY die durch Kommas getrennten Werte rekursiv durchläuft.

Methode 2: CTE mit rekursiver Vereinigung

Eine andere Technik besteht darin, einen gemeinsamen Tabellenausdruck (CTE) mit einer rekursiven Vereinigung zu verwenden:

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

Diese Methode verwendet einen rekursiven CTE, um durch Kommas getrennte Werte in einzelne Elemente aufzuteilen.

Methode 3: Verwendung der rekursiven Methode von INSTR

Die dritte Lösung verwendet einen rekursiven CTE mit der INSTR-Funktion, um die Start- und Endposition jedes Teilstrings zu identifizieren:

<code>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 verwendet INSTR, um die Position jedes Teilstrings rekursiv zu bestimmen und sie entsprechend zu extrahieren.

Das obige ist der detaillierte Inhalt vonWie kann ich durch Kommas getrennte Werte in Oracle SQL effizient in Zeilen konvertieren?. 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