Heim >Datenbank >MySQL-Tutorial >Wie kann ich durch Kommas getrennte Werte in SQLite mithilfe eines Common Table Expression (CTE) aufteilen?

Wie kann ich durch Kommas getrennte Werte in SQLite mithilfe eines Common Table Expression (CTE) aufteilen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-31 22:01:17729Durchsuche

How Can I Split Comma-Separated Values in SQLite Using a Common Table Expression (CTE)?

Aufteilen von durch Kommas getrennten Werten in SQLite: Ein Common Table Expression (CTE)-Ansatz

Im Bereich der Datenverwaltung besteht die Notwendigkeit Es kommt häufig zu geteilten kommagetrennten Werten (CSVs). Für SQLite, ein beliebtes, leichtgewichtiges Datenbanksystem, ist diese Aufgabe möglicherweise nicht so einfach wie in anderen SQL-Umgebungen, da keine dedizierte Funktion substring() vorhanden ist. Es gibt jedoch eine alternative Lösung, die einen Common Table Expression (CTE) nutzt.

Betrachten wir das folgende Szenario: Wir haben eine Tabelle mit einer Spalte „Kategorie“, die durch Kommas getrennte Zeichenfolgen enthält, und wir möchten sie extrahieren einzelne Werte aus jeder Zeichenfolge in separate Zeilen.

Ein CTE ist eine benannte, temporäre Ergebnismenge, die innerhalb einer einzelnen Abfrage weiter referenziert und bearbeitet werden kann. In unserem Fall können wir einen CTE verwenden, um die CSV-Strings rekursiv aufzuteilen und die extrahierten Werte in einer neuen Tabelle zu speichern. Hier ist die Abfrage:

WITH split(word, csv) AS (
  -- 'initial query'
  SELECT
    '',
    'Auto,A,1234444'||',' -- terminate with ',' indicating csv ending
  -- 'recursive query'
  UNION ALL SELECT
    substr(csv, 0, instr(csv, ',')), -- each word contains text up to next ','
    substr(csv, instr(csv, ',') + 1) -- next recursion parses csv after this ','
  FROM split -- recurse
  WHERE csv != '' -- break recursion once no more csv words exist
)
SELECT
  word
FROM
  split
WHERE
  word!=''; -- filter out 1st/last rows

Diese Abfrage teilt die CSV-Zeichenfolgen mithilfe der Funktion instr() auf, um das erste Komma zu finden, extrahiert die Teilzeichenfolge vor dem Komma und ruft sich rekursiv auf, um den Vorgang für den verbleibenden Teil zu wiederholen der Saite. Die Rekursion wird beendet, wenn keine Kommas mehr übrig sind.

Die resultierende Ausgabe enthält die einzelnen Werte, die aus den ursprünglichen CSV-Strings extrahiert wurden, organisiert in Zeilen:

Auto
A
1234444

Dieser Ansatz bietet eine leistungsstarke und Flexible Möglichkeit, durch Kommas getrennte Werte in SQLite aufzuteilen, was es zu einem wertvollen Werkzeug für Datenmanipulationsaufgaben macht.

Das obige ist der detaillierte Inhalt vonWie kann ich durch Kommas getrennte Werte in SQLite mithilfe eines Common Table Expression (CTE) 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