Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Nilai Dipisahkan Koma dalam Lajur MySQL kepada Baris Berasingan?

Bagaimana untuk Memisahkan Nilai Dipisahkan Koma dalam Lajur MySQL kepada Baris Berasingan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-28 07:32:11726semak imbas

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

Mysql String Split

Masalah:

Anda mempunyai jadual dengan lajur yang mengandungi koma -nilai yang diasingkan. Anda ingin membahagikan nilai ini kepada baris yang berasingan, dengan setiap nilai sepadan dengan satu baris.

Sebagai contoh, diberikan jadual:

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

Anda ingin mengekstrak baris berikut:

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

Penyelesaian:

Ini boleh dicapai menggunakan MySQL prosedur tersimpan. Skrip SQL berikut merangkumi kedua-dua prosedur tersimpan dan fungsi yang digunakan:

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 ;

Untuk menggunakan prosedur tersimpan ini, anda boleh menjalankan pertanyaan berikut:

CALL BadTableToGoodTable();

Ini akan mencipta jadual baharu yang dipanggil 'GoodTable' dengan data yang dikehendaki.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Nilai Dipisahkan Koma dalam Lajur MySQL kepada Baris Berasingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn