Heim >Datenbank >MySQL-Tutorial >Wie teile ich durch Kommas getrennte Werte in mehrere Zeilen in SQL auf?

Wie teile ich durch Kommas getrennte Werte in mehrere Zeilen in SQL auf?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-24 04:08:091033Durchsuche

How to Split Comma-Separated Values into Multiple Rows in SQL?

Aufteilen von Werten in mehrere Zeilen in SQL

Eine häufige Aufgabe bei der Datenverarbeitung besteht darin, eine durch Kommas getrennte Zeichenfolge in mehrere Zeilen aufzuteilen, z am Beispiel des Folgenden Anfrage:

Problem:

Bei einer gegebenen Tabelle mit einer ID-Spalte und einer Namensspalte mit durch Kommas getrennten Werten werden die Daten im folgenden Format zurückgegeben:

id name
1 a
1 b
1 c
2 b

Lösung:

Um dies zu erreichen, können wir MySQL nutzen SUBSTRING_INDEX-Funktion in Verbindung mit einer Zahlentabelle, die eine Zahlenfolge bis zur maximalen Anzahl zu teilender Felder enthält. Die folgende Abfrage veranschaulicht diesen Ansatz:

SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  numbers INNER JOIN tablename
  ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n

Wenn das Erstellen einer Zahlentabelle nicht möglich ist, können wir die folgende Abfrage verwenden, um die Zahlenfolge innerhalb der Abfrage selbst zu generieren:

SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  (
    SELECT 1 AS n UNION ALL
    SELECT 2 UNION ALL SELECT 3 UNION ALL
    SELECT 4 UNION ALL SELECT 5
  ) AS numbers INNER JOIN tablename
  ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n

Demo:

[SQL Fiddle Demo](https://www.sqlfiddle.com/#!5/cf4386/1)

Das obige ist der detaillierte Inhalt vonWie teile ich durch Kommas getrennte Werte in mehrere Zeilen in SQL auf?. 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