Heim >Datenbank >MySQL-Tutorial >Wie kann man in Oracle durch Kommas getrennte Werte effizient in Spalten aufteilen?

Wie kann man in Oracle durch Kommas getrennte Werte effizient in Spalten aufteilen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-22 09:36:09612Durchsuche

How to Efficiently Split Comma-Separated Values into Columns in Oracle?

Oracle: Durch Kommas getrennte Werte effizient in Spalten analysieren

Die Datenverarbeitung erfordert häufig die Aufteilung kommagetrennter Werte (CSV) in einzelne Spalten. Oracle bietet eine effiziente Lösung mit regulären Ausdrücken, die besonders bei der Verarbeitung einer großen Anzahl von Werten (in diesem Fall bis zu 255) von Vorteil ist. Dies vermeidet die umständliche Wiederholung von SUBSTR() Funktionen für jede Spalte.

Die Herausforderung: Extrahieren von bis zu 255 durch Kommas getrennten Werten in verschiedene Spalten.

Die Lösung: Nutzen REGEXP_SUBSTR()

Der Schlüssel ist die Funktion REGEXP_SUBSTR() und der folgende reguläre Ausdruck:

<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, COLUMN_NUMBER, NULL, 1)</code>

Regex verstehen:

  • (.*?): Entspricht einem beliebigen Zeichen (.) null oder mehrmals (*), nicht gierig (?). Dadurch wird sichergestellt, dass nur bis zum nächsten Komma erfasst wird.
  • (,|$): Entspricht entweder einem Komma (,) oder dem Ende der Zeichenfolge ($). Dadurch werden die Werte begrenzt.
  • 1: Gibt an, dass die erste erfasste Gruppe (der Wert selbst, ohne Komma) zurückgegeben werden soll.
  • COLUMN_NUMBER: Gibt an, welcher Wert (Spalte) extrahiert werden soll (1 für den ersten, 2 für den zweiten usw.).
  • NULL, 1: Diese Parameter werden für den Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung und für die Auswahl des ersten Vorkommens verwendet.

Anschauliches Beispiel:

Bedenken Sie diese CSV-Zeichenfolge:

<code>CSV_VALUES: 1.25, 3.87, 2, 5, 4, 3.3</code>

Um den ersten Wert (1,25) zu erhalten:

<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, 1, NULL, 1)</code>

Für den zweiten Wert (3,87):

<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, 2, NULL, 1)</code>

Durch die Iteration durch COLUMN_NUMBER werden alle Werte in einzelne Spalten extrahiert. Diese Methode skaliert effizient, unabhängig von der Anzahl der durch Kommas getrennten Werte innerhalb der Zeichenfolge.

Das obige ist der detaillierte Inhalt vonWie kann man in Oracle durch Kommas getrennte Werte effizient in Spalten 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