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!