Heim >Datenbank >MySQL-Tutorial >Wie teile ich durch Kommas getrennte Werte in einer MySQL-Spalte in separate Zeilen auf?

Wie teile ich durch Kommas getrennte Werte in einer MySQL-Spalte in separate Zeilen auf?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-28 07:32:11728Durchsuche

How to Split Comma-Separated Values in a MySQL Column into Separate Rows?

Mysql String Split

Problem:

Sie haben eine Tabelle mit einer Spalte, die Komma enthält -getrennte Werte. Sie möchten diese Werte in separate Zeilen aufteilen, wobei jeder Wert einer Zeile entspricht.

Zum Beispiel anhand der Tabelle:

Col1 col2
1 a,b,c
2 d,e

Sie möchten die folgenden Zeilen extrahieren:

Col1 col2
1 a
1 b
1 c
2 d
2 e

Lösung:

Dies kann mithilfe einer gespeicherten MySQL-Prozedur erreicht werden. Das folgende SQL-Skript enthält sowohl die gespeicherte Prozedur als auch die von ihr verwendete Funktion:

DELIMITER $$

CREATE FUNCTION strSplit(x VARCHAR(65000), delim VARCHAR(12), pos INTEGER) 
RETURNS VARCHAR(65000)
BEGIN
  DECLARE output VARCHAR(65000);
  SET output = REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos)
                 , LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1)
                 , delim
                 , '');
  IF output = '' THEN SET output = null; END IF;
  RETURN output;
END $$


CREATE PROCEDURE BadTableToGoodTable()
BEGIN
  DECLARE i INTEGER;

  SET i = 1;
  REPEAT
    INSERT INTO GoodTable (col1, col2)
      SELECT col1, strSplit(col2, ',', i) FROM BadTable
      WHERE strSplit(col2, ',', i) IS NOT NULL;
    SET i = i + 1;
    UNTIL ROW_COUNT() = 0
  END REPEAT;
END $$

DELIMITER ;

Um diese gespeicherte Prozedur zu verwenden, können Sie die folgende Abfrage ausführen:

CALL BadTableToGoodTable();

Dadurch wird eine erstellt neue Tabelle namens „GoodTable“ mit den gewünschten Daten.

Das obige ist der detaillierte Inhalt vonWie teile ich durch Kommas getrennte Werte in einer MySQL-Spalte in separate Zeilen 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